C 中的 char* 在C#中怎么调用

Valetta 2013-03-05 05:14:28
例如,有个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中的函数
...全文
1477 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
E次奥 2013-03-06
  • 打赏
  • 举报
回复
E次奥 2013-03-06
  • 打赏
  • 举报
回复
我刚问百度了,
http://bbs.csdn.net/topics/330082022
E次奥 2013-03-06
  • 打赏
  • 举报
回复
问百度吧,亲
Valetta 2013-03-06
  • 打赏
  • 举报
回复
用StringBuilder 可以了,
Frog1228 2013-03-06
  • 打赏
  • 举报
回复
ref byte
  • 打赏
  • 举报
回复
String sAs = Encoding.ASCII.GetString({ 0x00,0x00,0xE1,0x08,0x00,0x00,0x00,0x60 }); 这样的是八位。
  • 打赏
  • 举报
回复
这样肯定不行。超长了。其实这是把字节的。 { 0x00,0x00,0xE1,0x08,0x00,0x00,0x00,0x60 } 这样的字节数组
Valetta 2013-03-06
  • 打赏
  • 举报
回复
我转为字符串为 string s = "0000E10800000060" 这样不行。
  • 打赏
  • 举报
回复
这是16进制的。转成字符串是16位。 你是怎么转的?
Valetta 2013-03-06
  • 打赏
  • 举报
回复
8个字节内容是这个,0000E10800000060 转为string 是什么样的
Valetta 2013-03-06
  • 打赏
  • 举报
回复
引用 4 楼 Chinajiyong 的回复:
用string报什么错
用string 如果字符串的长度是16(8字节), 程序直接退出了 如果字符串的长度是8(8字节),返回序列号不对,传的值不正确才会提示序列号不对
绿领巾童鞋 2013-03-06
  • 打赏
  • 举报
回复
string
Trent1985 2013-03-06
  • 打赏
  • 举报
回复
一般而言就是byte[]和string,如果不对要自己仔细检查每一个要转换的地方到底是要用byte[]还是string,或者是自己代码有问题!!!
warfen 2013-03-06
  • 打赏
  • 举报
回复
8字节的用 ref long 1字节的用 ref char
warfen 2013-03-06
  • 打赏
  • 举报
回复
ref long
猴头 2013-03-06
  • 打赏
  • 举报
回复
用StringBuilder 吧 变长的.
青松2 2013-03-05
  • 打赏
  • 举报
回复
EnForGrass 2013-03-05
  • 打赏
  • 举报
回复
用string报什么错
  • 打赏
  • 举报
回复
Marshal.AllocHGlobal Marshal.Copy 方法就应该够了。
  • 打赏
  • 举报
回复
try StringBuilder
加载更多回复(1)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧