gpt4 book ai didi

c++ - 如何在 Perl 中使用指向 SWIG 中的 char 的指针?

转载 作者:行者123 更新时间:2023-11-30 02:12:46 26 4
gpt4 key购买 nike

我用了SWIG为 C++ 程序生成 Perl 模块。我在 C++ 代码中有一个函数返回一个“字符指针”。现在我不知道如何在 Perl 中打印或获取返回的 char 指针。

示例 C 代码:

 char* result() { 
return "i want to get this in perl";
}

我想在 Perl 中调用这个函数“result”并打印字符串。

该怎么做?

问候,阿南丹

最佳答案

根据 C++ 接口(interface)的复杂性,跳过 SWIG 并自己编写 XS 代码可能会更容易、更快且更易于维护。 XS&C++ 有点神秘。这就是为什么有 Mattia Barbon 的优秀 ExtUtils::XSpp CPAN 上的模块。它使包装 C++ 变得容易(而且几乎很有趣)。

ExtUtils::XSpp 发行版包含一个非常简单(且人为设计的)example具有字符串 (char*) 和整数成员的类。简化后的接口(interface)文件可能如下所示:

// 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 类型映射。它非常简单,所以我不会在这里添加它,但您可以在上面链接的示例分发中找到它。

关于c++ - 如何在 Perl 中使用指向 SWIG 中的 char 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com