我必须在C#中导入一个C DLL并具有该功能:
set_pin (IN char* str_user, IN char* str_old_pin, IN char* str_new_pin)
如何用C#编写? “ IN”是什么意思?
答案 0 :(得分:4)
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。