我用C#调用C++的DLL,但是运行的时候报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”我觉得是参数传的不正确,我是菜鸟,希望各位高手不吝赐教!!!感激不尽这是C++ DLL中的函数:
LONG APIENTRY devwdm_SetMirror(int nID, DWORD *dwMirror, BOOL fbGet);我在C#中视这样调用的: [DllImport("devwdm.dll",CharSet = CharSet . Unicode )]
       //函数功能:      将视频图水平翻转180度,
       //nID:           设备ID号
       //dwMirror:       为DWORD的指针,1或0, 1表示翻转,0表示正常显示
       //fbGet:          1:此函数当Get使用, 0,此函数当Set使用
      unsafe public static extern int devwdm_SetMirror(int nID, uint * dwMirror,bool fbGet);
       
      unsafe  private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
        {
            uint *dwMirror=(uint *)0;
            SDK_API.devwdm_SetMirror (nID ,dwMirror ,false );
        }请问什么地方出错了啊,还有,C++中的DWORD* ,在C#中怎么转换啊?用IntPtr也不行啊,谢谢各位了!!!

解决方案 »

  1.   

    [DllImport("devwdm.dll",CharSet = CharSet . Unicode )]
           //函数功能:      将视频图水平翻转180度,
           //nID:           设备ID号
           //dwMirror:       为DWORD的指针,1或0, 1表示翻转,0表示正常显示
           //fbGet:          1:此函数当Get使用, 0,此函数当Set使用
          public static extern int devwdm_SetMirror(int nID, ref uint dwMirror,bool fbGet);
           
          private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
            {
                uint dwMirror=0;
                SDK_API.devwdm_SetMirror (nID ,ref dwMirror ,false );
            }
      

  2.   

    DWORD     unsigned long     System.UInt32     32 位
    参数
    内存资源没有及时释放导致此错误
      

  3.   

    感谢1楼,我试了试,但还是不行,不过没有报错了。。感谢2楼,是DWORD * 啊,是个指针,不是DWORD。。
      

  4.   

    [DllImport("devwdm.dll",CharSet = CharSet . Unicode )]
           //函数功能:      将视频图水平翻转180度,
           //nID:           设备ID号
           //dwMirror:       为DWORD的指针,1或0, 1表示翻转,0表示正常显示
           //fbGet:          1:此函数当Get使用, 0,此函数当Set使用
          public static extern int devwdm_SetMirror(int nID, ref int dwMirror,bool fbGet);
           
          private void ckbShuiPing_CheckedChanged(object sender, EventArgs e)
            {
                int dwMirror=0;
                SDK_API.devwdm_SetMirror (nID ,ref dwMirror ,false );
            }
    C++的DLL是采用stdcall声明的吗?确认下调用方式