问题描述
c中结构体定义为typedefstruct_CAM_GROUP_INFO{intnCamGroupID;//cameragroupidcharszGroupName[64];//cameragroupnameintnServerID;//belongtowhichserverintstate;//MP_CAM_StateXXXX}CAM_GROUP_INFO;我现在在c#中定义结构体[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=1)]publicstructCAM_GROUP_INFO{publicintnCamGroupID;//cameragroupid[MarshalAs(UnmanagedType.ByValArray,SizeConst=64)]publicchar[]szGroupName;//cameragroupnamepublicintnServerID;//belongtowhichserverpublicintstate;//MP_CAM_StateXXXX};封装对应有两个方法,//从服务器得到视频组列表[DllImport(@"E:dllplayback_dlldebugplayback_dll.dll",EntryPoint="CCameraMngr_RetrieveCamGroupListFromServer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]publicstaticexternintCCameraMngr_RetrieveCamGroupListFromServer([In,Out]intSelf,intnServerID,[In,Out]CAM_GROUP_INFO[]pCamGroupList,intiMaxSize);//释放从服务器得到的视频组列表[DllImport(@"E:dllplayback_dlldebugplayback_dll.dll",EntryPoint="CCameraMngr_FreeCamGroupList",CharSet=CharSet.Unicode,CallingConvention=CallingConvention.StdCall)]publicstaticexternvoidCCameraMngr_FreeCamGroupList([In,Out]intSelf,[In,Out]CAM_GROUP_INFO[]pCamGroupList);像你说的如果我用CharSet=CharSet.Unicode在c#中像上面这样申明结构体,则释放不会出错,但是获取CCameraMngr_RetrieveCamGroupListFromServer这个函数得到的结构体的数据就不对,里面只有nCamGroupID是正确的其他都是0,字符类型的是乱码,如果改成ansi申明结构体,则得到数据都是正确的,但释放那个函数会报“传递给系统调用的数据区域太小。(异常来自HRESULT:0x8007007A)”错误,请求大虾帮忙!!
解决方案
解决方案二:
我也遇到了这个问题,就是不知道怎么解决,期待中。。。。。。
解决方案三:
我也遇到这个问题,各种办法都试过了,没法解决