试图将C ++指针编组为无符号long转换为C#ulong

时间:2011-09-08 14:10:49

标签: c# pinvoke

我有一个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?

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:4)

只需使用ref:

传递的uint
public static extern int Foo(int messageHandle, ref uint tag, StringBuilder part, StringBuilder value);