c# 操作vc里的CString?请做过此类调用的赐教!很多高手都说只能改成char* 运用,所以我把VC里面的函数改为了char*VC 函数举例:
char* test()
{
CString x="1234567890";
char* tempchar =x.GetBuffer(x.GetLength());
    return  tempchar;
}C#调用
[DllImport("CANLINK.dll",
EntryPoint = "test",         CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
unsafe public static extern StringBuilder test(); //有人建议使用StringBuilder或者直接保持CHAR*
[DllImport("CANLINK.dll",
EntryPoint = "test",         CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
unsafe public static extern char* test(); //char*
C#运行 StringBuilder mystr = new StringBuilder();
               mystr =CANLINK.test();
               MessageBox.Show(mystr.ToString());
//编译通过,MessageBox.Show乱码。
不用STRINGBUILDER,保持char*
 string mystr  = new string(CANLINK.test());
 MessageBox.Show(mystr.ToString());//编译通过,MessageBox.Show乱码。
以上两种方式都试了,都是乱码,如果CString x="1"; 则能正确MessageBox 显示 1。
请问VC里必须用char* 做函数返回值和参数,怎么在C#里调用这些函数

解决方案 »

  1.   

    哎呀,搞明白了,调用的时候必须方式为CharSet = CharSet.Ansi
    换个问题
    void test(char* mychar) 

    CString x="1234567890"; 
    char* mychar=x.GetBuffer(x.GetLength()); 
        return ; 

      

  2.   

    换个问题 把char* 放在参数里
    void test(char* mychar) 

    CString x="1234567890"; 
    mychar=x.GetBuffer(x.GetLength()); 
    }C# 调用:
    StringBuilder mystr = new StringBuilder();
    CANLINK.test(mystr);
    MessageBox.Show(mystr.ToString()); //运行发现mystr 为空,如何才能让VC里的参数mychar ="1234567890"
      

  3.   

    换个问题 把char* 放在参数里
    void test(char* mychar)
    {
    CString x="1234567890";
    mychar=x.GetBuffer(x.GetLength());
    这样直接复制不行,需要把x的内容复制到实参的空间里
      

  4.   

    这样直接复制不行,需要把x的内容复制到实参的空间里  
    我改了一下,依然不行呢?CString y;//添个实参
    void test(char* mychar) 

    CString x="1234567890"; 
    y=x;
    mychar=y.GetBuffer(y.GetLength()); 

    C# 调用: 
    StringBuilder mystr = new StringBuilder(); 
    CANLINK.test(mystr); 
    MessageBox.Show(mystr.ToString()); 
    依然为空
      

  5.   

    void test(char* mychar)
    {
    CString x="1234567890";
    y=x;
    mychar=y.GetBuffer(y.GetLength());

    我的意思是用strcpy、strncpy复制内容。或者你用char**做参数,函数里*mychar=x.Get.......这样
      

  6.   

    mychar=xxxxxx
    只是在函数内部把这个变量指向了另一个char*而已,待函数退出时就没了。