//定义
        [DllImport("NC2ACommDll.dll")]
        public extern static bool InitComm(String strPort, int BaudRate, byte ByteSize, byte Parity, byte StopBits);
        [DllImport("NC2ACommDll.dll")]
        public extern static bool SetAddress();        [DllImport("NC2ACommDll.dll")]
        public extern static bool GetTorqueSpeed(float fTorque, float fSpeed);
//fTorque:扭矩指针;fSpeed:转速指针
        [DllImport("NC2ACommDll.dll")]
        public extern static bool CloseComm();//调用                    float a = 0, ba = 0;
                    GetTorqueSpeed(a, ba);                   double data_ch10 = a;//11-试验件风扇输入轴转速
                   double data_ch11 = ba;//12-风扇输入扭矩  未接入
-------------------------编译通过,但在调试时就提示错误“尝试读取或写入受保护的内存,这通常指示其他内存已损坏”   
  这到底是哪儿的原因?请各位大侠帮忙! 

解决方案 »

  1.   

    [DllImport("NC2ACommDll.dll")] 
            public extern static bool GetTorqueSpeed(float fTorque, float fSpeed); 
    //fTorque:扭矩指针;fSpeed:转速指针 给个native的函数原型吧,还有既然是指针,怎么传的是float型?这种问题多半是类型转换错误。
      

  2.   

            [DllImport("NC2ACommDll.dll")] 
            public extern static bool GetTorqueSpeed(float fTorque, float fSpeed); 
    参数不正确 
      

  3.   


    这个是dll的readme----------
    1.初始化扭矩仪通信
    typedef BOOL (_stdcall *INITCOMM)(CString strPort,long BaudRate,BYTE ByteSize,BYTE Parity,BYTE StopBits);
    //strPort:串口;BautRate:波特率;ByteSize:数据长度;Parity:0-4 =None,Odd,Even,Mark,Space;
    //StopBits:0,1,2 = 1 ,1.5 ,2
    2.设置扭矩仪地址
    typedef BOOL (_stdcall *SETADDRESS)(WORD NC2AAddr);
    3.读扭矩仪扭矩转速值
    typedef BOOL (_stdcall *GETTORQUESPEED)(float &fTorque,float &fSpeed,DWORD &dTime);
    //NC3Addr:扭矩仪地址;fTorque:扭矩指针;fSpeed:转速指针;dTime:实时时间指针
    4.关闭通信
    typedef BOOL (_stdcall *CLOSECOMM)();
      

  4.   

    trypublic extern static bool GetTorqueSpeed(ref float fTorque,ref float fSpeed); 
      

  5.   


            [DllImport("NC2ACommDll.dll")] 
            public extern static bool GetTorqueSpeed(ref float fTorque, ref float fSpeed, ref int dTime); 
    试一下这个