CallingConvention.Cdecl 改成stdcall

解决方案 »

  1.   

    不能更改,如果更改为stdcall 后打开串口opencom方法都出错错误为:对 PInvoke 函数“TR.Forms!TR.Forms.Form1::opencom”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
      

  2.   

    static extern bool readdata([In,Out]byte[] ptr);
      

  3.   

    谢谢Saleayas的回复,但还是不行,错误为:”运行时遇到了错误。此错误的地址为 0x71732e2d,在线程 0x1e58 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈“我们分析下,会不会是因为C#是安全的代码,而Delphi是不安全的代码,因此C#在传入内存地址时出现错误了?
    大神指点
      

  4.   

    简单来说,delphi一定要用stdcall,否则它使用fastcall,那么和C#是不兼容的。
      

  5.   

    谢谢两大版主,delphi接入无法完成,现在自己写读取,也遇到难题,请斑竹们看看
    caozhy bdmh版主请指导 C#读取串口发送接收命令帧 http://bbs.csdn.net/topics/390866505    感谢