C++中的函数原型为extern "C" __declspec(dllexport)  int UnGateCode(char *in, char *out)
{//这里使用了in[i]取值 对out[i]进行了赋值
}
C#中如果通过DllImport引用这个方法,参数应该如何写呢?尝试下下面的写法不对
        [DllImport("Mir3Base64.dll")]
        public static extern int UnGateCode(ref string inchar,[MarshalAs( UnmanagedType.LPStr )] StringBuilder outchar);谁有更好的办法。,谢谢!

解决方案 »

  1.   

    如果你用byte[]数组代替,则肯定没错,因为byte[]不涉及到字符编码。例如:
    [DllImport("Mir3Base64.dll")]
    public static extern int UnGateCode(byte[] inchar,byte[] outchar);至于如何解析byte[]到字符串,自己调用Encoding类吧。
      

  2.   

    楼上的朋友,outchar是在C#中初始化,然后再c++中赋值,最后再在C#中转成字符串的
      

  3.   

    public static extern int UnGateCode(string inchar,StringBuilder outchar);
    去掉ref试试
      

  4.   

    试试这样[DllImport("Mir3Base64.dll", CharSet = CharSet.Auto)]
    public static extern int UnGateCode(string inchar, StringBuilder outchar);// 调用
    string inchar = "xxxxxxxx";
    StringBuilder outchar = new StringBuilder(1024); //自己估摸出来的字符串有多长,确保够用
    UnGateCode(inchar, outchar);
      

  5.   

    往C的函数里面传字符串是很容易的,char*就是string,你这个ref string肯定不对,这等于你传了一个保存该字符串首地址的地址