日期:2014-05-17  浏览次数:20892 次

关于p-invoke中函数调用,很费解
有一个c++ 的dll c++的头文件声明及成功调用代码:
extern "C" _declspec(dllexport) FPMUIGroupOption * __stdcall createGroupOption(FPMUIGroupOption **option);
FPMUIGroupOption *groupOption = createGroupOption(&groupOption);

我的c#函数声明:
public static extern IntPtr CreateGroupOption(out IntPtr groupOption);
IntPtr ipZ = FunctionManager.dll_func.DllFunction.CreateGroupOption(out ipZ);

结构抛出了 访问受保护的内存......各位看下,我这样不对么,我怎么想怎么对呀;
我之前有用另种声明调用方式也不行:
public static extern IntPtr CreateGroupOption(ref IntPtr groupOption);

int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(GroupOption));
IntPtr ipZ= System.Runtime.InteropServices.Marshal.AllocHGlobal(size);
IntPtr ipY = FunctionManager.dll_func.DllFunction.CreateGroupOption(ref ipZ);
------解决方案--------------------
你的函数原型里面是二级指针,你c#里面声明是不是有点问题。
------解决方案--------------------
引用:
你的函数原型里面是二级指针,你c#里面声明是不是有点问题。

就算是二级指针;我第二种方法传的也是个intptr 的引用啊

而且,c++里的参数是未初始化的;所以我传个指针完全没问题嘛·
------解决方案--------------------
自己给自己顶一下咯