C#中的byte[]对应C++中的什么,
 public static extern bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, uint ReCVLen);C++ dll;bool Read(BYTE* InBuf,int InBufSize,BYTE OutBuf,int OutBufSize,DWORD ReCVLen)
这样子编译没问题,运行后说尝试读取或写入受保护的内存。这通常指示其他内存已损坏。是不是参数写错了,该怎么写?  反正在vc中写read(inbuf,inbufsize,outbuf,outbufsize,&recvlen)
 inbuf 和outbuf是byte数组, 在vc中是正确的我用过, 所有想做成dll,在c#中调用.. 

解决方案 »

  1.   

    C#的byte[] 对应的也是 C++ 的byte[] 或者 byte*
      

  2.   

    vc byte[]不让我过,弄Byte*是过了。 那怎么会说尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
      

  3.   

    [DllImport("xxxx.dll")]
    public static extern bool Read(Byte[] InBuf, int InBufSize, out Byte[] OutBuf, out int OutBufSize, uint ReCVLen);
      

  4.   

    恩?不是一样的么,dllimport我没贴
      

  5.   

    [DllImport("xxxx.dll")]
    public static extern bool Read(Byte[] InBuf, int InBufSize, out Byte[] OutBuf, out int OutBufSize,out uint ReCVLen);
      

  6.   


    看花了,不好意思 有out了
      

  7.   

    最后一个参数也要使用out,你在C++中是传入的一个指针。
      

  8.   

    bool Read(BYTE* InBuf,int InBufSize,BYTE OutBuf,int OutBufSize,DWORD ReCVLen)
    第三个参数是不是写错了?
      

  9.   


    恩,我第3个写byte*  
    是不是像你这样写就对了?
      

  10.   

    注意下数组的声明方式
    c#是type【】XXX;
    而c++ 是type XXX【】;
      

  11.   

    public static extern bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, uint ReCVLen);
    这么写是对的,不用什么ref和out.
    出错可能是因为你分配的内存不够
      

  12.   

    bool Read(BYTE* InBuf,int InBufSize,BYTE OutBuf,int OutBufSize,DWORD ReCVLen)在C#中DllImport的时候应该为
    bool Read(IntPtr InBuf, int InBufSize, IntPtr OutBuf, int OutBufSize, uint32 RecvLen);
      

  13.   

    可以用char型数组的。
    都是一个字节。
      

  14.   

    都试过了,。还是不行。、、extern "C" _declspec(dllexport) bool Read(BYTE* InBuf,int InBufSize,BYTE* OutBuf,int OutBufSize,DWORD ReCVLen)
    [DllImport("XLow.dll", EntryPoint = "Read")] public static extern bool Read(Byte[] InBuf, int InBufSize, out Byte[] OutBuf, int  OutBufSize,  uint ReCVLen);调用:Read(InBuf, 6,  out OutBuf,13 ,   RecvLen))
      

  15.   

    c#
    bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, uint ReCVLen);c++
    bool Read(Char[] InBuf, int InBufsize, Char[] OutBuf, int OutBufSize, unsigned int ReCVLen); 
      

  16.   

    c++
    bool Read(Char[] InBuf, int InBufsize, Char[] OutBuf, int OutBufSize, unsigned int ReCVLen);  error C2146: syntax error : missing ')' before identifier 'InBuf'error C2146: syntax error : missing ';' before identifier 'InBuf'fatal error C1004: unexpected end of file found
      

  17.   

      知道了, 你们都是对的 是我dll中的错extern "C" _declspec(dllexport) bool Read(char* InBuf, int InBufSize, char* OutBuf, int OutBufSize, DWORD RecvLen)
    {
    // DWORD tt= pXLow->readx(InBuf,InBufSize,OutBuf,OutBufSize,&RecvLen);
    // return true;
    }注释掉就没异常了。
      

  18.   

    其实是想在c#调用DLL1的,反正很麻烦,要把DLL1的头文件写过,
    所以想写DLL2,在DLL2中调用DLL1,然后我在C#中调用DLL2.
    这样可以么?关键就用到DLL1中的一个函数Read(要写入数据的缓存,写入的长度,读出数据的缓存,读出的长度,实际返回的长度);所以在DLL2中调用Read,最后在C#中调用DLL2,你说,数据会返回在OutBuf数组中吗?
      

  19.   

    ,DWORD ReCVLen) 是不是应该是,DWORD* ReCVLen)?
      

  20.   

    恩,DWORD*,那对应什么uint*?写不来,所以不要*了。
      

  21.   


    bool Read(BYTE* InBuf,int InBufSize,BYTE* OutBuf,int OutBufSize,DWORD* ReCVLen)
    public static extern bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, ref uint ReCVLen);记住,调用前OutBuf要定义得足够大