关于p-invoke中函数调用,很费解

_lee_chong 2012-11-28 01:57:28
有一个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);
...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
_lee_chong 2012-12-05
  • 打赏
  • 举报
回复
自己给自己顶一下咯
_lee_chong 2012-11-30
  • 打赏
  • 举报
回复
引用 1 楼 wushuang443 的回复:
你的函数原型里面是二级指针,你c#里面声明是不是有点问题。
就算是二级指针;我第二种方法传的也是个intptr 的引用啊 而且,c++里的参数是未初始化的;所以我传个指针完全没问题嘛·
wushuang443 2012-11-29
  • 打赏
  • 举报
回复
你的函数原型里面是二级指针,你c#里面声明是不是有点问题。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧