gpt4 book ai didi

c# - 将 C++ int 数组编码到 C#

转载 作者:可可西里 更新时间:2023-11-01 16:29:26 25 4
gpt4 key购买 nike

我想将一个整数数组从 C++ 编码到 C#。我有一个非托管 C++ dll,其中包含:

DLL_EXPORT int* fnwrapper_intarr()
{
int* test = new int[3];

test[0] = 1;
test[1] = 2;
test[2] = 3;

return test;
}

在 header 中声明 extern "C"DLL_EXPORT int* fnwrapper_intarr();

然后我使用 pinvoke 将其编码到 C# 中:

[DllImport("wrapper_demo_d.dll")]
[return: MarshalAs(UnmanagedType.SafeArray)]
public static extern int[] fnwrapper_intarr();

然后我像这样使用函数:

int[] test = fnwrapper_intarr();

但是,在程序执行期间,我收到以下错误:SafeArray cannot be marshaled to this array type because it has either either nonzero lower bounds or more than one dimension.

我应该使用什么数组类型?或者是否有更好的方法来编码数组或整数 vector ?

最佳答案

[DllImport("wrapper_demo_d.dll")]public static extern IntPtr fnwrapper_intarr();IntPtr ptr = fnwrapper_intarr();int[] result = new int[3];Marshal.Copy(ptr, result, 0, 3);

还需要在非托管Dll中编写Release函数,删除fnwrapper_intarr创建的指针。此函数必须接受 IntPtr 作为参数。

DLL_EXPORT void fnwrapper_release(int* pArray){    delete[] pArray;}[DllImport("wrapper_demo_d.dll")]public static extern void fnwrapper_release(IntPtr ptr);IntPtr ptr = fnwrapper_intarr();...fnwrapper_release(ptr);

关于c# - 将 C++ int 数组编码到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3776485/

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