【发布时间】:2015-03-24 14:22:48
【问题描述】:
我有这样的 c++ 类型定义
typedef void* ScreenNode;
并像这样在我的 c++ 代码中使用它
ret = InitNode("factory", &g_screen_node, 128, 128, EN_C1Dev);
**EN_C1Dev 是一个枚举
我的 typedef 变量是一个 void 指针,InitNode 通过更改指针值“g_screen_node”返回一个值。
现在我在具有此定义的 C# 程序内的 dll 中使用此函数
c++代码
extern "C" __declspec(dllexport) int CB_initNode(ScreenNode* p_g_screen_node,int width,int heigth,EN_DevType EN_C1Dev) { int ret = 0;
//InitNode ----------------------------------------------------------------
ret = InitNode("factory", p_g_screen_node, 128, 128, EN_C1Dev);
return ret;
}
dll定义类
[DllImport(dllName)]
public static extern
int CB_initNode(out IntPtr g_screen_node, int width, int heigth, EN_DevType EN_C1Dev);
最后是我的主程序
IntPtr g_screen_node = new IntPtr();
ret = BBIA.CB_initNode(out g_screen_node , 128, 128, EN_DevType.EN_C3Dev);
CB_initNode 函数返回错误代码,g_screen_node 未返回预期值并停留在 0x00000000!
【问题讨论】:
-
除非你有,否则不要在C#中使用指针。 (提示:您不必这样做。将 P/Invoke 签名更改为使用
ref int g_screen_node并传递ref ab。这不会修复您的错误,但您仍然应该更改它。)
标签: c# c++ variables dll typedef