gpt4 book ai didi

c# - PInvoke,数据来回传输

转载 作者:行者123 更新时间:2023-11-28 03:45:22 34 4
gpt4 key购买 nike

我正在尝试使用 P/Invoke 从 C# 调用 C++ 函数。

[DllImport(PATH)]
public static extern int PQunescapeByteaWrapper(
ref byte[] src,
ref byte[] dst);

匹配的 C++ 函数如下所示:

extern DECLSPEC int PQunescapeByteaWrapper(unsigned char* src, unsigned char* dst)
{
size_t dst_len;
dst = PQunescapeBytea(src, &dst_len);
return ((int)dst_len);
}

以及C#的调用:

PQfun.PQunescapeByteaWrapper(ref EscapedMessage, ref UnescapedMessage);

调试到 C++ 我可以看到“src”被正确传输并且“dst”也被计算,但是当我跳回 C# 时,“dst”byte[] 数组不成立"dst"unsigned char* array 值但是 C++ P/Invoke 之前的原始值!!如何设法传输计算值?

问候,斯特凡

最佳答案

你的 C++ 方法签名和实现是错误的。您正在为参数分配一个新地址。您应该使用指向指针的指针,例如

extern DECLSPEC int PQunescapeByteaWrapper(unsigned char* src, unsigned char** dst)
{
size_t dst_len;
*dst = PQunescapeBytea(src, &dst_len);
return ((int)dst_len);
}

顺便说一句,你这里没有内存泄漏吗?您是打算覆盖 dst 引用的现有数组中的值,还是打算创建一个新数组并将其分配给 dst?

关于c# - PInvoke,数据来回传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7847976/

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