gpt4 book ai didi

C# - DLLImport 和函数默认值

转载 作者:太空狗 更新时间:2023-10-29 20:31:53 26 4
gpt4 key购买 nike

我正在通过 C# 与 native 第 3 方 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);

有什么想法吗?添加第三个参数真的能解决这个问题吗?

最佳答案

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

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

关于C# - DLLImport 和函数默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com