首页 新闻 搜索 专区 学院

c#如何把c++的指针(IntPtr)转换结构体(struct)?

1
悬赏园豆:20 [已解决问题] 解决于 2016-08-19 13:51

我要用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:

.....
}
181027923的主页 181027923 | 初学一级 | 园豆:170
提问于:2016-08-18 14:35
< >
分享
最佳答案
0

对比下两边的struct

收获园豆:20
jello chen | 大侠五级 |园豆:7096 | 2016-08-18 15:20
其他回答(1)
0

怎么解决的呢

kong1xiao2min3 | 园豆:202 (菜鸟二级) | 2018-01-25 14:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册