日期:2014-05-19  浏览次数:20844 次

c# 调用c dll 时出现尝试读取或写入受保护的内存,这通常指示其他内存已损坏

typedef   struct{
DWORD   dwYear; //年
DWORD   dwMonth; //月
DWORD   dwDay; //日
DWORD   dwHour; //时
DWORD   dwMinute; //分
DWORD   dwSecond; //秒
}NET_DVR_TIME,*LPNET_DVR_TIME;

NET_DVR_API   LONG   __stdcall   NET_DVR_FindNextFile(LONG   lFindHandle,LPNET_DVR_FIND_DATA   lpFindData);


        public   struct   NET_DVR_TIME
                {
                        public   int   dwYear;       /*     年   */
                        public   int   dwMonth;     /*     月   */
                        public   int   dwDay;       /*     日   */
                        public   int   dwHour;     /*     时   */
                        public   int   dwMinute;     /*     分   */
                        public   int   dwSecond;     /*     秒   */
                }
                public   struct   NET_DVR_FIND_DATA
                {
                        public   string   sFileName;       /*     文件名   */
                        public   NET_DVR_TIME   struStartTime;   /*     文件的开始时间   */
                        public   NET_DVR_TIME   struStoptime;   /*     文件的结束时间   */
                        public   int   dwFileSize;       /*     文件的大小   */
                }

[DllImport( "HCNetSDK.dll ")]
                public   static   extern   int   NET_DVR_FindNextFile(int   lFindHandle,   ref   NET_DVR_FIND_DATA   lpFindData);    

 
  NET_DVR_FIND_DATA   strFileInfo=new   NET_DVR_FIND_DATA   ();
 
  bRet   =   NET_DVR_FindNextFile(m_lFileHandle,   ref   strFileInfo);


------解决方案--------------------
[MarshalAs(UnmanagedType.LPArray)]byte[] sFileName

然后在byte[] 转换成STRING 试试