繁体   English   中英

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

[英]Trying to marshal C++ pointer to unsigned long into a C# ulong

我有一个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才有效。

如何使用C ++ DLL更改指针传递的unsigned long的值?

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

只需使用ref传递的uint:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM