在C#中使用C ++代码

时间:2010-11-06 21:14:46

标签: c# c++

我有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[])
        {

            ...
        }
    };

2 个答案:

答案 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”:否则它可以。 :)