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);
{
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 都报错。。
{
/// <summary>
///
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string sFileName; /* 文件名 */
public NET_DVR_TIME struStartTime; /* 文件的开始时间 */
public NET_DVR_TIME struStoptime; /* 文件的结束时间 */
public int dwFileSize; /* 文件的大小 */
}这样就好了,不过还是谢谢楼上哥们。。
当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 、常见异常及错误