c# - C DLL。如何在 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
。
有关详细信息,请参阅调用约定枚举。
推荐阅读
- powershell - 过滤 Get-printer 变量输出
- ruby-on-rails - 只更新一个与 simple_fields_for 的关联
- c++ - Boost::Variant "Error: no match for call to [...]" 访问者操作符重载
- html - HTML:为什么文本比图像低一个段落?(附图片)
- python - 混合数值和分类数据的观测值之间成对距离计算的有效实现
- python - dateutil.parser - 用点分隔小时和分钟
- java - 如何根据孩子的值在 RecyclerView Android 上显示项目
- php - 在 MacOS 中升级到 PHP 7.2 版本
- python - 打印列表中具有与列表平均值相同的平均值的元素对
- typescript - Vue / Typescript,得到模块'“*.vue”'没有导出成员