C# 调用c的dll,char*指针的问题

shawnmeng 2008-02-17 10:26:21
要做一个读卡器的程序,厂商提供的C的dll,其中有个函数用到CHAR*,请各位大侠指导。
函数说明如下:
2.3.2 读卡片非认证区信息,即2-7BLOCK的信息 iReadPlantData
int iReadPlantData(int handle,int offset,int datalen,char * dataBuf)
功能:读卡片非认证区信息
输入:int handle读写器句柄
int offset:偏移量,为4的倍数,从0-20之间取值
int dataLen:写入数据的长度,为4的倍数,从4-24之间取值
输出:char * dataBuf:需要更新的数据,为16进制格式。
返回:0,非认证区信息读出正确。
非0,错误。


我是这样写的(略去无关代码)
public unsafe class Card
{
[DllImport("pumchric.dll", CharSet = CharSet.Auto)]
public static extern int iReadPlantData(int handle,int offset,int datalen,char * dataBuf);
}

private void button1_Click(object sender, EventArgs e)
{
char dataBuf;
i = Card.iReadPlantData(50, 0, 24, &dataBuf);
textBox2.Text = Convert.ToString(dataBuf);
}
char * dataBuf这个位置应该保存着一个字符串。现在程序可以运行,但读出来的是一个乱码(可能是只读了第一个字符??),CHAR*在C#中如何使用?如何改?
...全文
1662 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
barbara3299 2011-11-15
  • 打赏
  • 举报
回复
果然此方法可行 赞一个
limoo2008 2011-11-15
  • 打赏
  • 举报
回复
新手 路过~~~~
lalac 2008-02-17
  • 打赏
  • 举报
回复
调用时:
使用char[]

char[] dataBuf;
i = Card.iReadPlantData(50, 0, 24, dataBuf);
textBox2.Text = new string(dataBuf);

使用StringBuilder

StringBuilder dataBuf;
i = Card.iReadPlantData(50, 0, 24, dataBuf);
textBox2.Text = dataBuf.ToString();
shawnmeng 2008-02-17
  • 打赏
  • 举报
回复
lalac 那调用的时候怎么写呢?

好像不行
shawnmeng 2008-02-17
  • 打赏
  • 举报
回复
wodegege10,好人啊
我发了,请查收!
lalac 2008-02-17
  • 打赏
  • 举报
回复

[DllImport("pumchric.dll", CharSet = CharSet.Auto)]
public static extern int iReadPlantData(IntPtr handle,int offset,int datalen,char[] dataBuf);

OR

[DllImport("pumchric.dll", CharSet = CharSet.Auto)]
public static extern int iReadPlantData(IntPtr handle,int offset,int datalen,StringBuilder dataBuf);

wenbin 2008-02-17
  • 打赏
  • 举报
回复
我现在在家上网,没IDE,
你把资料发到我邮箱里,
huchuanwuwenbin@163.com
明天帮你搞,好不?
shawnmeng 2008-02-17
  • 打赏
  • 举报
回复
能帮我改一下代码吗,我是新手,十分感谢!
wenbin 2008-02-17
  • 打赏
  • 举报
回复
char * dataBuf:需要更新的数据,为16进制格式。是字符串
char dataBuf; 是字符,这两个不匹配
你可以试char[] 或 byte[]
shawnmeng 2008-02-17
  • 打赏
  • 举报
回复
问题解决了
两个问题
CharSet = CharSet.Ansi 不能用Auto
用StringBuilder 不要用CHAR[]

十分感谢两位!

110,536

社区成员

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

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

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