手头上的任务需要将不同摄像头厂商的SDK集成到同一的平台下,拿到文档后发现不同厂商SDK的结构体定义都大同小异,就是有一些结构体名字相同,内容却有些差别;
以海康威视和亿维为例:
海康威视:
typedef struct{
long nWidth;
long nHeight;
long nStamp;
long nType;
long nFrameRate;
DWORD dwFrameNum;
}FRAME_INFO;亿维:
ypedef struct
{
long nWidth;
long nHeight;
long nStamp;
long nType;
long nFrameRate;
long bIsVideo;
int nLinseSize[4];
}FRAME_INFO; 将各自的头文件包含进来后,编译时会产生定义冲突的警告,且编程时也会产生混乱,比如访问亿维的 bIsVideo 变量却产生一个变量不存在的错误想请教各位遇到此类问题时是怎样处理的,前提当然是不可能要求各个厂商更改其结构定义
以海康威视和亿维为例:
海康威视:
typedef struct{
long nWidth;
long nHeight;
long nStamp;
long nType;
long nFrameRate;
DWORD dwFrameNum;
}FRAME_INFO;亿维:
ypedef struct
{
long nWidth;
long nHeight;
long nStamp;
long nType;
long nFrameRate;
long bIsVideo;
int nLinseSize[4];
}FRAME_INFO; 将各自的头文件包含进来后,编译时会产生定义冲突的警告,且编程时也会产生混乱,比如访问亿维的 bIsVideo 变量却产生一个变量不存在的错误想请教各位遇到此类问题时是怎样处理的,前提当然是不可能要求各个厂商更改其结构定义
解决方案 »
- IE6如何支持XHTML文件
- 问下raw socket能统计到各个进程的流量嘛?
- 问:手头上DOC,PDF....文档越来越多,为了更好管理这些东西,大家都用何文档管理软件?
- visual studio 2005 命令行输出乱码。。。求救!!!!
- 如何把自己的程序做成计算机的一个服务?(vc中) 积极参与,来者有分!
- 怎样比较标准声音和录入声音的相似程度?
- GetMenuItemInfo这个函数有几个参数?
- ◎◎◎◎listview显示图标的问题,谢谢◎◎◎◎
- 请教高手,工具条问题
- 用CListCtrl导航属性页如何做?
- 对方发送一个XML格式数据,接收后怎么在内存中读取
- 我想删除一个链表,但是用我编的会出现乱码
类似于 COM 。
<ream238>的方法是我最先尝试的,对于大厂商可以这么实现,但是现在高清摄像机厂商太多太泛滥了,有些厂商的SDK命名空间后,编译就出错,只好作罢了<Saleayas>的方法如何解决结构定义冲突的问题呢? 现在库的加载并没有问题
这样,你的程序和 SDK 的库就隔离了。在这个接口库中,使用动态加载。
使用命名空间 namespace 隔离各个 SDK。
但是,必须动态加载 SDK 库,数据定义可以使用命名空间隔离。
但是导出函数如果不用动态加载,在连接到 lib 的时候,会提示函数符号冲突。我用这个方法,Hook 到 DirectX 的游戏中,DirectX 的各个版本就是这样冲突的。