static extern unsafe int GetReaderData(int BlockFlag,char OutDataType,char * OutData,char * ControlData);  
依你说,第三个是数组,那就直接定义数组
第四个是结构体,定义这个结构体,你应该知道结构体的具体东西
那就变成:
static extern int GetReaderData(int BlockFlag, char OutDataType, byte[] OutData, 
ref CONTROLDATA ControlData);
ref不成的话,可以再试out

解决方案 »

  1.   

    你想调用 C++ 的库程序首先它的公有接口以及数据类型得是 CLSComliant(true) .请参见ECMA-335 中定义的CLS规范.而char是CLS兼容的,在C++中数组是物理地址连续分配的对它的数据成员的访问按照以char为单位的物理地址增量分配既可.
      

  2.   

    [DllImport("Reader_dll.dll")]
    static extern unsafe int GetReaderData(int BlockFlag,char * OutDataType,char * OutData,char * ControlData);private void btread_Click(object sender, EventArgs e)
            {
                
                char[] tmp_buf=new char[512];
                char[] tmp_buf1 =new char[512];
                char wtype;
                int len;
                StopFlag = false;                
                if(RBTBIN.Checked)
                    {
                        wtype="bin";
                    }
                    else
                    {
                        wtype="hex";
                    }
                while (!StopFlag)
                    {
                        //Array.Clear(tmp_buf, 0, sizeof(tmp_buf));  //初始化数组内存
                       // Array.Clear(tmp_buf, 0, sizeof(tmp_buf1));
                       // len = GetReaderData(0, wtype, tmp_buf, v_control_data);
                       
                  len =GetReaderData(0,wtype,ref tmp_buf,ref tmp_buf1);  //读取数据
                     }   我这样调用错在哪?
      

  3.   

    static extern unsafe int GetReaderData(int BlockFlag,char * OutDataType,char * OutData,char * ControlData);。。非托管代码?指针?
    调用的时候把char*改成string 应该就可以了
      

  4.   

    在DLL里面的函数原形是GetReaderData(int BlockFlag,  unsigned char * OutDataType, unsigned char * OutData,unsigned char * ControlData);这样的,大虾们帮忙看看怎么来改吧。。
      

  5.   

    static extern unsafe int GetReaderData(int BlockFlag,string OutDataType,string OutData,string ControlData);传进去的时候可以用string来代替char*