wince C# 调用 mfc dll 返回字符串乱码之解决方案[转]

老板让做一个界面,后天用C、C++混合写的。我学了2天winform做个界面,然后把后天打包为dll。C++和C#的类型不匹配,让我折腾了好几天。终于今天下午搞定。期间遇到dll返回字符串为乱码。转来以后备用:

c#调用非托管dll时,数据类型的差异是引起出错的重要原因,在本例中调用dll以返回字符串,一直都是乱码
还几天不得解决,原来这样可以:
在c++ 中返回值用char*
extern "C" __declspec(dllexport) int scanRe(char* data)
{
    strcpy(data,"47");
    return 0;
}

在c#中接收返回值用 ref byte
        [DllImport("PDAScandll.dll",CharSet=System.Runtime.InteropServices.CharSet.Auto)]
        public static extern int scanRe( ref byte param2);
        private void button1_Click(object sender, EventArgs e)
        {
            byte[] param2 = new byte[255];//新建字节数组
           
            scanRe(ref param2[0]);//向dll函数传入参数

            string s = System.Text.Encoding.GetEncoding("GB2312").GetString(param2, 0, param2.Length);
            //将字节数组转换为字符串

            label1.Text =s;
          }

转载于:https://www.cnblogs.com/Purple_Xiapei/archive/2012/06/28/2568597.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值