我必须在 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/