尝试将指向 unsigned long 的 C++ 指针编组为 C# ulong

SSu*_*ffe 2 c# pinvoke

我有一个 C++ DLL,我正在尝试使用 C# 与之交互。我无权访问 DLL 源代码,因此无法更改。我需要调用的方法之一包含一个指向 unsigned long 的指针:

int __stdcall Foo(FooHandle messageHandle, unsigned long* tag, char* part, char* value)
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个具有相同方法签名的测试 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);
Run Code Online (Sandbox Code Playgroud)

当我从 C# 调用然后尝试将 IntPtr 转换为 Int32 或 Int64 时,我得到零。我已经在这里和一般的网络以及 MSDN 上进行了搜索,但似乎无法找到有关如何执行此操作的解释。我认为 char* 将是困难的部分,但 StringBuilder 可以正常工作。

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

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

Dav*_*nan 5

只需使用由 ref 传递的 uint:

public static extern int Foo(int messageHandle, ref uint tag, StringBuilder part, StringBuilder value);
Run Code Online (Sandbox Code Playgroud)

  • @Aravind 不是回应对另一个问题的回答的仓促书面评论 (2认同)