gpt4 book ai didi

Perl XS 和 C++ 将指针传递给缓冲区

转载 作者:行者123 更新时间:2023-12-04 20:16:24 26 4
gpt4 key购买 nike

我几乎不知道 C++,所以这无济于事,而且我的 XS 也好不了多少。我正在为 C++ 库创建一个 XS 接口(interface),我几乎所有的方法都可以工作,除了一个。

Perl 中的方法应该如下所示:

$return_data = $obj->readPath( $path );

该方法被定义为这个 .h 文件:
int readPath(const char* path, char* &buffer, bool flag=true);

如果传入 NULL,“缓冲区”将被分配。

还有两个具有不同签名的附加版本的 readPath,但它们不是我想要的。 (有趣的是,当我尝试编译时,它告诉我“候选人”是我不想要的两个。)是因为它不理解“char * &”吗?

有人可以帮助我编写需要的 xsub 吗?

我在 Perl 5.14.2 上。

顺便说一句——我还对 T_IV 使用了类型映射“long long int”。我找不到任何关于如何正确地输入 long long 的文档。有什么建议我应该如何长期打字?

谢谢,

最佳答案

我从未从 C 或 XS 处理过 C++。如果是 C,它将是:

void
readPath(SV* sv_path)
PPCODE:
{
char* path = SvPVbyte_nolen(sv_path, len);
char* buffer = NULL;

if (!readPath(path, &buffer, 0))
XSRETURN_UNDEF;

ST(0) = sv_2mortal(newSVpv(buffer, 0));
free(buffer);

XSRETURN(1);
}

希望这可行,或者您可以对其进行调整以使其正常工作。

我以为:
  • readPath成功/失败返回真/假。
  • buffer不分配失败。
  • buffer 的释放器是 free .
  • 关于Perl XS 和 C++ 将指针传递给缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597746/

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