例如,有个c的DLL,有个函数如下,函数名称
int Init(char *AMMNO, char *state,char* Version, char* SessionID ,char *R1, char* message1);
参数说明
入参
AMMNO:ESAM序列号;8字节
State:状态;1字节;00—0状态,01—1状态
Version:版本;1字节,固定“01”
SessionID:会话ID;1字节;00‐‐新建,01‐‐恢复
R1:随机数1;16字节出参
message1:N字节(大于1K,小于2K)返回值
0:正常
1001:序列号错误
1002:状态标识错误
1003:版本错误
1004:会话ID错误
1005:随机数错误
C# 中怎么调用这样调用不成功,值传的不对,提示序列号错误
[DllImport("MYDll.dll")]
public static extern int Init(byte[] AMMNO, int state, int Version, int SessionID, byte[] R1, ref byte[]message1);第一个值AMMNO要传递的是“0000E10800000060”用第二种方法 也不行,
public static extern int Init(string AMMNO, string state, string Version, string SessionID, string R1, ref string message1);请问在C#中要怎么调用C中的函数
int Init(char *AMMNO, char *state,char* Version, char* SessionID ,char *R1, char* message1);
参数说明
入参
AMMNO:ESAM序列号;8字节
State:状态;1字节;00—0状态,01—1状态
Version:版本;1字节,固定“01”
SessionID:会话ID;1字节;00‐‐新建,01‐‐恢复
R1:随机数1;16字节出参
message1:N字节(大于1K,小于2K)返回值
0:正常
1001:序列号错误
1002:状态标识错误
1003:版本错误
1004:会话ID错误
1005:随机数错误
C# 中怎么调用这样调用不成功,值传的不对,提示序列号错误
[DllImport("MYDll.dll")]
public static extern int Init(byte[] AMMNO, int state, int Version, int SessionID, byte[] R1, ref byte[]message1);第一个值AMMNO要传递的是“0000E10800000060”用第二种方法 也不行,
public static extern int Init(string AMMNO, string state, string Version, string SessionID, string R1, ref string message1);请问在C#中要怎么调用C中的函数
Marshal.Copy
方法就应该够了。
用string 如果字符串的长度是16(8字节), 程序直接退出了
如果字符串的长度是8(8字节),返回序列号不对,传的值不正确才会提示序列号不对
{ 0x00,0x00,0xE1,0x08,0x00,0x00,0x00,0x60 }
这样的字节数组
这样的是八位。
1字节的用 ref char