求救:c# 传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)

呵逗乐儿 2009-09-08 10:47:05
c中结构体定义为
typedef struct _CAM_GROUP_INFO
{
int nCamGroupID; //camera group id
char szGroupName[64]; //camera group name
int nServerID; //belong to which server
int state; //MP_CAM_StateXXXX
} CAM_GROUP_INFO;

我现在在c#中定义结构体 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)]
public struct CAM_GROUP_INFO
{

public int nCamGroupID; //camera group id
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
public char[] szGroupName; //camera group name

public int nServerID; //belong to which server

public int state; //MP_CAM_StateXXXX
};

封装对应有两个方法, //从服务器得到视频组列表
[DllImport(@"E:\dll\playback_dll\debug\playback_dll.dll", EntryPoint = "CCameraMngr_RetrieveCamGroupListFromServer", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int CCameraMngr_RetrieveCamGroupListFromServer([In, Out] int Self, int nServerID, [In, Out] CAM_GROUP_INFO[] pCamGroupList, int iMaxSize);


//释放从服务器得到的视频组列表
[DllImport(@"E:\dll\playback_dll\debug\playback_dll.dll", EntryPoint = "CCameraMngr_FreeCamGroupList", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
public static extern void CCameraMngr_FreeCamGroupList([In, Out] int Self, [In, Out] CAM_GROUP_INFO[] pCamGroupList);

像你说的 如果我用CharSet = CharSet.Unicode在c#中像上面这样申明结构体,
则释放不会出错,但是获取CCameraMngr_RetrieveCamGroupListFromServer这个函数 得到的结构体的数据就不对,里面只有nCamGroupID是正确的 其他都是0,字符类型的是乱码,如果改成ansi申明结构体,则得到数据都是正确的,但释放那个函数会报 “传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A) ”错误,请求大虾帮忙!!
...全文
937 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
haodafeng2012year 2012-05-21
  • 打赏
  • 举报
回复
我也遇到这个问题,各种办法都试过了,没法解决
liuyunda 2010-10-26
  • 打赏
  • 举报
回复
我也遇到了这个问题,就是不知道怎么解决,期待中。。。。。。

110,548

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧