我用SWIG爲C++程序生成一個Perl模塊。我在C++代碼中有一個函數返回一個「字符指針」。現在我不知道如何在Perl中打印或獲取返回的字符指針。如何在Perl中使用指向SWIG的字符的指針?
樣品C代碼:
char* result() {
return "i want to get this in perl";
}
我想要調用在Perl這個功能 「結果」,並打印字符串。
如何做到這一點?
問候, 阿南丹
我用SWIG爲C++程序生成一個Perl模塊。我在C++代碼中有一個函數返回一個「字符指針」。現在我不知道如何在Perl中打印或獲取返回的字符指針。如何在Perl中使用指向SWIG的字符的指針?
樣品C代碼:
char* result() {
return "i want to get this in perl";
}
我想要調用在Perl這個功能 「結果」,並打印字符串。
如何做到這一點?
問候, 阿南丹
根據的C++接口的複雜性,可能會更容易,更快,更易於維護跳過SWIG和寫入XS碼自己。 XS & C++是一門神祕的藝術。這就是爲什麼Mattia Barbon在CPAN上出色的ExtUtils::XSpp模塊。它使包裝C++變得簡單(並且幾乎很有趣)。
ExtUtils :: XSpp發行版包含一個非常簡單(並且人爲設計)的example,該類有一個字符串(char *)和一個整數成員。以下是剪切界面文件的樣子:
// This will be used to generate the XS MODULE line
%module{Object::WithIntAndString};
// Associate a perl class with a C++ class
%name{Object::WithIntAndString} class IntAndString
{
// can be called in Perl as Object::WithIntAndString->new(...);
IntAndString();
// Object::WithIntAndString->newIntAndString(...);
// %name can be used to assign methods a different name in Perl
%name{newIntAndString} IntAndString(const char* str, int arg);
// standard DESTROY method
~IntAndString();
// Will be available from Perl given that the types appear in the typemap
int GetInt();
const char* GetString();
// SetValue is polymorphic. We want separate methods in Perl
%name{SetString} void SetValue(const char* arg = NULL);
%name{SetInt} void SetValue(int arg);
};
請注意,這仍然需要有效的XS類型映射。這非常簡單,所以我不會在這裏添加它,但是您可以在上面鏈接的示例發行版中找到它。
嗨..謝謝。但我想在swig中做到這一點.. – Anandan 2009-09-07 07:38:28
您必須www.swig.org/tutorial.html都提到痛飲教程
不管怎麼說,因爲你只想調用該函數從Perl的C函數,
1.輸入您的接口文件(其包裝器和模塊部分中的所有函數聲明)。
2.編譯swig和options。
3.使用gcc編譯來創建對象。
4.編譯gcc選項以創建共享對象。
5.運行該程序如下:
perl
use moduleName;
$a = moduleName::result();
[注:看到所生成的模塊文件(的.pm)爲正確funvtion原型指向在包裝文件的正確功能]
你能提供示例代碼嗎? – tsee 2009-09-07 07:23:25
爲您的界面文件和您的cpp文件提供完整的代碼。 – letsc 2011-06-08 08:21:52