元帅C++;int数组到C# 我想把一组从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元帅C++;int数组到C# 我想把一组从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; },c#,c++,C#,C++,在headerextern“C”DLL_EXPORT int*fnwrapper_intar()中使用声明 然后我使用pinvoke将其编组为C#: 我使用这样的函数: int[] test = fnwrapper_intarr(); 但是,在程序执行期间,我遇到以下错误:SafeArray无法封送到此数组类型,因为它具有非零下界或多个维度。 我应该使用什么数组类型?还是有更好的方法来编组整数数组或向量? [DllImport("wrapper_demo_d.dll")] public sta
extern“C”DLL_EXPORT int*fnwrapper_intar()中使用声明代码>
然后我使用pinvoke将其编组为C#:
我使用这样的函数:
int[] test = fnwrapper_intarr();
但是,在程序执行期间,我遇到以下错误:SafeArray无法封送到此数组类型,因为它具有非零下界或多个维度。
我应该使用什么数组类型?还是有更好的方法来编组整数数组或向量?
[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);
[DllImport(“wrapper\u demo\u d.dll”)]
公共静态外部IntPtr fnwrapper_intar();
IntPtr ptr=fnwrapper_intar();
int[]结果=新的int[3];
封送处理副本(ptr,结果,0,3);
您还需要在非托管Dll中编写Release函数,该函数删除FNU 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);
DLL_导出无效包装_发布(int*pArray)
{
删除[]帕雷;
}
[DllImport(“wrapper\u demo\u d.dll”)]
公共静态外部无效FNU发布(IntPtr ptr);
IntPtr ptr=fnwrapper_intar();
...
FNU发布(ptr);
如果您是FNU intarr的作者,是否有任何东西反对返回safearray(或更好的参数)?+1太好了!它成功了,除了我认为它应该是marshall.Copy
而不是marshall::Copy
。如果不知道C端数组的大小,该怎么办?
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);