请教 C# 调用 C++ 的dll 问题,谢谢!

原型:intReadBaseMsg(unsignedchar*pMsg,int*len);说明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息已经分段解析,... 原 型:int ReadBaseMsg( unsigned char *pMsg, int * len);

说 明:本函数用于读取卡中基本信息,包括文字信息与图像信息。文字信息已经分段解析,输出格式为单字节,且每一字段信息已经被表示为字符串。图象信息被解码后存为文件photo.bmp(在当前工作目录下)。
参 数:
pMsg [out] 无符号字符指针,指向读到的文本信息。需要在调用时分配内存,字节数不小于192。函数调用成功后,各字段的文本信息已经转换为单字节形式,并表示为字符串格式。
Len [out] 整数, 返回总字符长度,可以给空值(NULL)。
请问C#中应如何调用?我写成这样是错误的(报错栈溢出):
[DllImport(@"E:\CardIDTest\lib\sdtapi.dll")]
public static extern int ReadBaseMsg(ref byte[] msg, ref int len);
private void button1_Click(object sender, EventArgs e)
{
byte[] msg = new byte[193];
int len = 0;
int n = ReadBaseMsg(ref msg, ref len);
}
展开
 我来答
狠有毅毅
2013-10-04 · TA获得超过399个赞
知道答主
回答量:38
采纳率:100%
帮助的人:41.9万
展开全部
[DllImport(@"E:\CardIDTest\lib\sdtapi.dll")]
public static unsafe extern int ReadBaseMsg(char* msg, ref int len);
private unsafe void button1_Click(object sender, EventArgs e)
{
char* msg = stackalloc char[1000];
int len = 0;
int n = ReadBaseMsg(msg, ref len);
String str = new String(msg);
}

使用unsafe关键字记得要在项目属性的生成中, 把"允许编译不安全代码"勾上
追问
你好,首先谢谢你,考虑到稳定性,我不想用指针,可以帮忙不用指针解决吗?谢谢,我这边没有分数了,不然可以给你追加分数的,谢谢你
追答
用StringBuilder试试
public static extern int ReadBaseMsg(ref StringBuilder msg, ref int len);

var sb = new StringBuilder();
int len = 0;
int n = ReadBaseMsg(ref sb, ref len);
String str = sb.ToString();
匿名用户
2013-10-04
展开全部
char * 不是字符串吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3485217
2013-10-04
知道答主
回答量:80
采纳率:0%
帮助的人:17.9万
展开全部
我啥都不会。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式