c# - 动态链接库。如何在 C# 中导入

标签 c# c

我必须在 C# 中导入 C DLL 并具有该功能:

set_pin (IN char* str_user, IN char* str_old_pin, IN char* str_new_pin)

如何用 C# 编写? “IN”是什么意思?

最佳答案

IN 表示参数用于向方法提供数据,而不用于从方法返回数据。

因为数据只被传递给方法,你可以只将参数声明为 string - 但你可能需要知道方法期望字符串的格式 - 它们是 UTF8, UTF16、ANSI 等?

一旦知道所需的字符串格式,就可以在方法的 P/Invoke 声明中指定它(或选择 CharSet.Auto,通常表示“ANSI”):

[DllImport("your.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall))]
public static extern bool set_pin(string str_user, string str_old_pin, string str_new_pin);

只需尝试使用“CharSet.Auto”,不要担心使用不同的东西,除非它不起作用!

请注意,您没有指定方法的返回类型,所以我只是将其设为 bool 作为示例。

如果不是标准的 StdCall,您可能还需要指定调用约定。

参见 the calling convention enum了解详情。

另见 this Microsoft article for documentation on writing P/Invoke specifications .

关于c# - 动态链接库。如何在 C# 中导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58060770/

相关文章:

c# - SqlBulkCopy 错误处理/错误继续

c# - 在列表上使用 TableQuery.CombineFilters 进行 AND 运算

c# - 如何在 C# 中将递归对象转换为集合?

c - strstr 带有常规 char 数组,而不是字符串

c - 为什么错误消息的标准输出

c - 排序文本文件

c# - 如何将参数传递给 Microsoft Sync 2.1 生成的存储过程

具有固定数组大小的 C# ToArray()

C 计算整数中特定数字的出现次数

c - 程序中存在结构错误 - 段错误