设置为 NULL 的 C# Marshall void*

C# Marshall void* that is set to NULL

正在尝试为 C DLL 编写包装器。

C Native 签名是:

BOOL WINAPI PBM_OpenCard (DWORD* CardHandle, TCHAR* CardName, void* Module, 
        DWORD ModuleId, WORD ShareFlags, WORD LoadFlags)

文档说:“Module 设置为 NULL - 保留”

这是我的 C# 签名的样子:

public static extern  bool PBM_OpenCard(ref uint CardHandle,
        StringBuilder CardName, System.IntPtr Module, uint ModuleId,
        ushort ShareFlags, ushort LoadFlags) 

我在 C# 应用程序中为 Module 参数传递了什么?我尝试使用 System.IntPrt.Zero 并编译,但不确定这是否是正确的方法,因为此时我无法与硬件接口。

您的假设是正确的,IntPtr.Zero 确实对应于 C 的 NULL,只是不要忘记将您的 .NET 构建设置为远离 AnyCPU 以匹配本机架构您链接的方法。

提示:使用 [return: MarshalAs] 属性语法将 BOOL 的编组设置为 System.Boolean(虽然这是默认设置,但它有助于显式)。这同样适用于你的参数,因为我看到它正在使用 TCHAR(这让我死在里面)。

提示 2:不要忘记修改方法签名以符合 .NET 风格约定,包括不在标识符中使用下划线,PascalCase 用于 publics 以及使用 camelCase 参数名称。还要考虑对所有消费者隐藏本机方法并将它们包装在安全的 IDisposable 对象中。