C#一个非nET的DLL 原型函数 int Readkey(char* sett,char* rdata,int cmd) ,在C#里要怎么定义 sett为传入值,rdata是存储返回输出的,整个函数成功/失败返回数字值,其中两个char* 在C#下要怎么定义? [sett= "1,9600,N,8,1";]

解决方案 »

  1.   

    [DllImport("KP.dll", EntryPoint = "Readkey", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public unsafe static extern int ReadKey(char* sett, char* rdata, int cmd);
                   private void button1_Click_1(object sender, EventArgs e)
            {
                //
                string sk = "1,9600,N,8,1";
                StringBuilder sd = new StringBuilder(sk, 100);
                string rt="";
                 StringBuilder rk = new StringBuilder(rt, 100);
                int p;
             
              
               p=ReadKey(sd, rk, 1);
               textBox1.Text = p.ToString();
                       }
    还是提示错误:无法从 StringBuilder 转换为CHAR *
      

  2.   

    如果那个是C++的话,char*是表示指针吧。
    在C#里也可以定义指针,但需要声明unsafe并且编译的时候也要加上unsafe参数。
    或者你可以试试ref char xxx,ref表示引用传递。
      

  3.   


            [System.Runtime.InteropServices.DllImport("。.dll")]
            public static extern int Readkey(
            StringBuilder sett,
            ref StringBuilder rdata,
            int cmd
            );
      

  4.   

    char * 用stringbuilder类型,而且不需要ref。
      

  5.   


    [DllImport("KP.dll", EntryPoint = "Readkey", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public unsafe static extern int ReadKey(string sett, StringBuilder rdata, int cmd);        private void button1_Click_1(object sender, EventArgs e)
            {
                string sk = "1,9600,N,8,1";
                StringBuilder sd = new StringBuilder(sk, 100);
                int p;
                p=ReadKey(sk, sd, 1);
                textBox1.Text = p.ToString();
            }
      

  6.   

    说的对,改成这样:[DllImport("xxx.dll",CharSet =CharSet.Ansi)]
     public static extern int Readkey(StringBuilder sett,StringBuilder rdata,int cmd);
      

  7.   

    错了,第一作为传入参数,用string
    [DllImport("xxx.dll",CharSet =CharSet.Ansi)]
     public static extern int Readkey(string sett,StringBuilder rdata,int cmd);