我用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