我用vc写了一个动态链接库,其中的一个函数原型是下面这样的:void myfunc(char* name);我想在C#中调用这个函数,我是这样调用的:// 声明
[DllImport("DllTest.dll")]
private static extern void ExportFunc(out char[] name);// 调用
char[] name = new char[100];
ExportFunc(out name);现在程序执行到这里就出错,这是什么原因?我分析是vc中char是ascii,但是在C#中char就变成了unicode码了,所以无法匹配就出错了。但是现在如何才能匹配上?

解决方案 »

  1.   

    使用StringBuilder类型变量作参数;
    声明不加out;
      

  2.   

    [DllImport("DllTest.dll")]
    private static extern void ExportFunc(StringBuilder name);调用:
    using System.Text;string name;
    StringBuilder sb = new StringBuilder(100);
    ExportFunc(sb);name = sb.ToString();
      

  3.   

    http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconadvancedcominterop.asp
      

  4.   

    COM互操作中,char*对应的类型是string
      

  5.   

    如果想从vc中返回一个参数,那么就不能用以下的定义:
    void myfunc(char* name);需要
    void myfunc(char** name);
    或者
    void myfunc(char name[100]);
      

  6.   

    恩,参数不应该用char[],用string