C# - DLLImport和函数默认值

时间:2010-07-20 17:48:43

标签: c# .net c++ pinvoke dllimport

我通过C#与本机第三方C ++ DLL连接,提供的互操作层如下所示:

C#:

[DllImport("csvcomm.dll")]
public static extern int CSVC_ValidateCertificate(byte[] certDER, int length);

C ++:

CSVC_Status_t CSVCOMM_API CSVC_ValidateCertificate(BYTE* certDER, DWORD length, 
    DWORD context = CONTEXT_DEFAULT);

请注意,C#extern定义中只有两个参数,因为C ++函数为第三个参数提供了默认值。它是否正确?在使用提供的定义时,我收到了一些不确定的结果,但是当我添加第三个参数时,它似乎每次都正常工作而不是零星。

[DllImport("csvcomm.dll")]
public static extern int CSVC_ValidateCertificate(byte[] certDER, int length, 
    int context);

有什么想法吗?添加第3个参数是否真的可以解决这个问题?

1 个答案:

答案 0 :(得分:6)

C ++中的可选参数在编译时解析。当你通过P / Invoke调用它时,你需要始终指定所有三个参数。

如果你想拥有一个可选参数,你需要使用一个提供可选支持(或一个C#4可选参数)的重载来围绕此方法创建一个C#包装器。但是,对C ++库的实际调用应始终指定所有三个参数。