首页 > 解决方案 > C DLL。如何在 C# 中导入

问题描述

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

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

如何在c#中编写它?“IN”是什么意思?

标签: c#c

解决方案


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

有关详细信息,请参阅调用约定枚举

另请参阅此 Microsoft 文章以获取有关编写 P/Invoke 规范的文档


推荐阅读