下面的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#
更新
我添加了一些额外的声明
private static extern ushort RF_EM4305_Login(IntPtr handle, int DataRate,IntPtr password);
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 等于内存中的 short -1100。
我从 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#
更新
我添加了一些额外的声明
private static extern ushort RF_EM4305_Login(IntPtr handle, int DataRate,IntPtr password);
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 等于内存中的 short -1100。