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);

解决方案 »

  1.   

    typedef struct
    {
    char sFileName[100];//文件名
    NET_DVR_TIME struStartTime;//文件的开始时间
    NET_DVR_TIME struStopTime;//文件的结束时间
    DWORD dwFileSize;//文件的大小
    }NET_DVR_FIND_DATA,*LPNET_DVR_FIND_DATA;短了一个,
    我估计出错的地放就是
    char sFileName[100];//这个结构体我改成了 string 和stringbuind 都报错。。
      

  2.   

    [MarshalAs(UnmanagedType.LPArray)]byte[] sFileName然后在byte[] 转换成STRING   试试
      

  3.   

    public struct NET_DVR_FIND_DATA
            {
               /// <summary>
               /// 
               /// </summary>
               [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
                public string sFileName;   /*  文件名 */
                public NET_DVR_TIME struStartTime; /*  文件的开始时间 */
                public NET_DVR_TIME struStoptime; /*  文件的结束时间 */
              
                public int dwFileSize;   /*  文件的大小 */
            }这样就好了,不过还是谢谢楼上哥们。。
      

  4.   

    尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
    当c#调用其它语言封装的dll时候,有可能会出现这个错误。1、先来看看dll说明文档里面的函数原型说明:int GetItemNames(char* sName,WORD wItemId);2、分析发现:char* 是个令人头疼的问题,如果转换成以下c#代码运行时就会出错:        [DllImport("kingvewcliend.dll")]          public static extern int GetItemNames(string  sName, int wItemId);3、正确的转换方法是:        [DllImport("kingvewcliend.dll")]        public static extern int GetItemNames(StringBuilder  sName, int wItemId);4、在主程序中正确的调用是:        StringBuilder regname = new StringBuilder(256); GetItemNames(regname, i); posted @ 2008-12-18 10:26 badnewfish 阅读(0) 评论(0)  编辑 收藏 网摘 所属分类: OPC 、常见异常及错误