由于项目需要,被迫在C++中通过托管方式调用C#的类库,本来调用也很简单,但是由于C#中的数据类型和C++是不一样的,所以处理起来就比较麻烦,这不,我自己就为了理顺这个数据类型,花了好几天时间。
C#类库代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StringDll
{
public class Class1
{
public int GetString(out string strRet)
{
strRet = "120,;,0;133,1;142,0;150";
return strRet.Length;
}
public static int DataRead(int m_TableType, ref byte[] m_InData, int m_InLen, ref byte[] m_OutData, ref int m_OutLen)
{
m_OutData = Encoding.Unicode.GetBytes("abc严峻");
string str = Encoding.Unicode.GetString(m_OutData);
return 0;
}
}
}
这部分代码加入到C++中后,查看函数原型的时候就发生了变化,第一个函数就变成了

本文介绍了在C++中通过CLR调用C# DLL时遇到的数据类型转换难题,尤其是如何定义适合DataRead()函数的参数。作者通过尝试和分析函数原型,成功解决了将C#的byte数组传递给C++的问题,并提供了转换字符串的方法。
最低0.47元/天 解锁文章
3016





