我有c ++ dll和类我希望从C#代码发送字符串,因为CLR我不能使用字符串,我会在c ++ dll中将字符串更改为char,并从c#发送字节(因为c ++中的c ++ char = byte但是c#不理解c ++数组我可以发送1个字节就可以了,但不是数组,请帮忙! DLL代码:
public ref class Coding
{
public:
void HillCoding(char filePath[])
{
...
}
};
答案 0 :(得分:1)
首先尝试此操作,因为CLR会将string
转换为char *
,不是吗?:
callThisCPlusPlusMethod(myString)
如果不起作用,请使用
char[] sendArray = myString.ToCharArray();
callThisCPlusPlusMethod(sendArray);
或者,如果需要不同的编码:
byte[] sendArray = Encoding.TheEncodingINeed.GetBytes(myString);
callThisCPlusPlusMethod(sendArray);
注意: 我倾向于喜欢含糊不清的名字:)
答案 1 :(得分:1)
以下是从C#调用C ++ dll函数的工作代码:
sbyte[] A_SB_array = new sbyte[0];
ArrayConvCtoSB(ref A_SB_array, ar_param.ToCharArray());
fixed (sbyte* SB_array = A_SB_array)
return CPSFEW.getDataLength(SB_array);
这不是“非常好的代码”,但它说明了你需要的东西。
PS:这是ArrayConvCtoSB。我不喜欢它,只是为了理解。
static private void ArrayConvCtoSB(ref sbyte[] to_sbyte, char[] from_char)
{
for (int i = 0; i < from_char.Length; i++)
{
Array.Resize(ref to_sbyte, to_sbyte.Length + 1);
to_sbyte[i] = (sbyte)from_char[i];
}
}
PPS:强制要求“垃圾收集器”不要清除SB_array内存:“fixed”:否则它可以。 :)