以下的 c# dll 导入声明是什么?
What is the c# dll import declaration of the following
我有一个来自 c++ 头文件的以下函数:
__int16 __stdcall s_em4305_login (HANDLE m_hUSB, int DataRate, UCHAR * password);
当我运行 VB 等值时:
Private Declare Function RF_EM4305_Login Lib "SRF32.dll" Alias "s_em4305_login" (ByVal handle As Long, ByVal DataRate As Long, ByRef bytes As Byte) As Integer
我得到 -1100 作为值
当我运行 c# 等价时:
[DllImport("SRF32.dll", EntryPoint = "s_em4305_login")]
private static extern ushort RF_EM4305_Login(IntPtr handle, int DataRate,byte[] password);
我得到一个不同的值。第三个参数很可能被错误地声明。有人可以协助将c ++声明转换为c#吗
更新
我添加了一些额外的声明
私有静态外部 ushort RF_EM4305_Login(IntPtr 句柄、int DataRate、IntPtr 密码);
private static extern ushort RF_EM4305_Login(IntPtr handle, int DataRate, ref byte[] password);
对于所有 3 个 c# 声明,我得到返回的值"64436"。
如果您的非托管代码将password
视为以 Null 结尾的 ansi 字符串,则这两个都应该有效。
[DllImport("SRF32.dll", EntryPoint = "s_em4305_login", CharSet = CharSet.Ansi)]
private static extern short RF_EM4305_Login(IntPtr handle, int DataRate, string password);
[DllImport("SRF32.dll", EntryPoint = "s_em4305_login")]
private static extern short RF_EM4305_Login(IntPtr handle, int DataRate, [MarshalAs(UnmanagedType.LPStr)]string password);
您的 C# 声明也没有错,因为 ushort 64436 等于内存中的短 -1100。
相关文章:
- C++避免重复声明的语法是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- 在将函数声明为友元时,尖括号的含义是什么?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 假设声明中某些上下文中需要的名称查找规则是什么
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- C++中这个声明的向量是什么意思
- boost::hana 转发声明标头的用例是什么?
- 这个嵌套结构声明是什么意思?
- 以下的 c# dll 导入声明是什么?
- 这个 c++ 类声明是什么意思
- 这个C++函数声明是什么
- 请解释一下这个朋友声明是什么意思
- 函数调用前的类型声明是什么意思?
- 这个论点的声明是什么意思:"type (*name1) (const type& name2)"?
- c++中的这种声明是什么意思
- c++中的这种声明是什么意思?
- 以下声明是什么意思