我有一个C ++ DLL,我试图使用C#进行交互。我无法访问DLL源代码,因此无法更改。我需要调用的方法之一包含指向unsigned long的指针:
int __stdcall Foo(FooHandle messageHandle, unsigned long* tag, char* part, char* value)
我创建了一个具有相同方法签名的测试DLL项目,所以我可以尝试解决这个问题,但是我还没有成功地让DLL更改指针引用的unsigned long的值并获得该值回到C#方面。 C#侧声明是:
[DllImport("Foo.dll", EntryPoint = "Foo", CallingConvention = CallingConvention.StdCall)]
public static extern int Foo(int messageHandle, IntPtr tag, StringBuilder part, StringBuilder value);
当我从C#调用然后尝试将IntPtr转换为Int32或Int64时,我得到零。我一直在这里搜索和网络以及MSDN,似乎无法找到如何做到这一点的解释。我认为char *将是困难的部分,但StringBuilder才有效。
如何使用更改指针传递的无符号long值的C ++ DLL?
任何帮助将不胜感激。感谢。
答案 0 :(得分:4)
只需使用ref:
传递的uintpublic static extern int Foo(int messageHandle, ref uint tag, StringBuilder part, StringBuilder value);