我正在使用rVDACQ_Connect返回结构的函数从 C# 到 C++ 的回调,我知道我有正确格式的结构,因为我已经单独测试了结构。函数接受参数:C++
tVDACQ_CallBackRec* (_stdcall* rVDACQ_Connect)(int, tVDACQ_CallBackProc, void*, short*, int);
作为tVDACQ_CallBackRec返回的结构。
我想知道的是 C# 中的等效参数类型。
tVDACQ_CallBackRec VDACQ_Connect(int i, [MarshalAs(UnmanagedType.FunctionPtr)] tVDACQ_CallBackProc proc, IntPtr n, IntPtr[] buffer, int j)
是我已经拥有的。我尝试使用 IntPtr 作为使用该函数的 C++ 部分,该函数使用参数的关键字this,void*并使用IntPtr返回错误,即“方法的类型不是 PInvoke 兼容”。
部分问题也可能是short*当参数被传递到使用 C++ 代码中的函数时,ashort[]被使用,因此IntPtr[].
我希望结构会被返回,但我也可以将返回类型更改为IntPtr然后 do Marshal.PtrToStructure。