我要用C#来调用c++生成DLL 中的一个接口来下载文件,该接口需要通过回调函数来获取文件信息,其中回调函数有一个参数为IntPtr类型,需要转成struct结构体,代码如下:
//事件回调函数 void JCEventCallback(int nLinkID, JCEventType etType, IntPtr pData1, uint pData2, IntPtr pUserData) { if (etType == JCEventType.JCET_GetFileListOK) //获取远程录像成功 { List<PJCRecFileInfo> g_RecFileInfoList = new List<PJCRecFileInfo>(); g_RecFileInfoList.Clear(); object obj = Marshal.PtrToStructure(pData1, typeof(PJCRecFileInfo)); var pInfos = (PJCRecFileInfo)obj; for (int i = 0; i < pData2; ++i) { //g_RecFileInfoList.Add(pInfos[i]); } }
执行到这句报错了 object obj = Marshal.PtrToStructure(pData1, typeof(PJCRecFileInfo));
有没有高手知道如何转换的????
c++接口demo有回调函数例子的,可本人不懂c++,代码如下:
void funJCEventCallback(JCLink_t nLinkID, JCEventType etType, DWORD_PTR pData1, DWORD_PTR pData2, LPVOID pUserData) { DWORD dwMsgID = 0; switch(etType) { case JCET_GetFileListOK: { g_RecFileInfoList.clear(); PJCRecFileInfo pInfos = (PJCRecFileInfo)pData1; int nCount = (int)pData2; for(int i = 0; i < nCount; ++i) { g_RecFileInfoList.push_back(pInfos[i]); } } case JCET_GetFileListError: ..... }
对比下两边的struct
怎么解决的呢