需要在C#中调用 C/C++ 写的DLL,但里面函数传递参数为char* 形式,
如 [DllImport("GP-32.DLL", EntryPoint = "ibwrt", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern int ibwrt(int ud, char * buf, long cnt);
怎么将string 或 char[]转换为char* 和将
char*  转换为 string 或 char[]?

解决方案 »

  1.   

    传入给c/c++的使用StringBuilder,传出来的也可以用StringBuilder或string.
      

  2.   

    怎么用StringBuilder具体怎么做,举个例可以不?
    十分感谢!!
      

  3.   

    咕~~(╯﹏╰)C++的char* 中的char是1字节的,而且Charset估计是ANSI,或者UTF8的。而C#的char[]中的char是2字节,存放UNICODE16的。你应该用某种CodePage或者Charset转码为byte[],再转给c++的char*~
      

  4.   

     [DllImport("GP-32.DLL", EntryPoint = "ibwrt", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            public static extern int ibwrt(int ud, StringBuilder buf, long cnt);//调用
    int ud;
    long cnt;
    StringBuilder buf=new StringBuilder();
    ibwrt(ud, buf, cnt);
      

  5.   

    string w = " ";
    IntPtr ptr = Marshal.StringToHGlobalAnsi(w);
    if (SendMessage(hEdit, WM_GETTEXT, 100, ptr))
    或是
    StringBuilder builder = new StringBuilder(1024);
    直接用builder。
      

  6.   

    http://stackoverflow.com/questions/1994477/c-pinvoke-out-strings-declaration
    http://www.pinvoke.net/default.aspx/kernel32.getshortpathname
      

  7.   

    谢谢大家,如果参数是short * 类型呢?
      

  8.   

    指针都可以用ref 变量
    short *
    ->
    ref short