不同厂商SDK中结构体定义冲突的问题

Ryanwen 2012-05-10 02:57:35
手头上的任务需要将不同摄像头厂商的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 变量却产生一个变量不存在的错误

想请教各位遇到此类问题时是怎样处理的,前提当然是不可能要求各个厂商更改其结构定义
...全文
240 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg3707 2012-05-10
  • 打赏
  • 举报
回复
还有一个办法,从你给的两个例子看,只是细小的差别,这样你把这两个结构定义成一个,就是把两个结构的变量合并到一个结构,然后你的程序里用合并后的结构.这样就可以了,但前提是所有同名的结构体差别不大,含义差别不大,只有这样才可这么做,如果两个结构含义完全不同或差别太大,就不能这么做了
Saleayas 2012-05-10
  • 打赏
  • 举报
回复
创建一个接口库。提供一个统一的接口。
这样,你的程序和 SDK 的库就隔离了。

在这个接口库中,使用动态加载。
使用命名空间 namespace 隔离各个 SDK。
但是,必须动态加载 SDK 库,数据定义可以使用命名空间隔离。
但是导出函数如果不用动态加载,在连接到 lib 的时候,会提示函数符号冲突。

我用这个方法,Hook 到 DirectX 的游戏中,DirectX 的各个版本就是这样冲突的。
Ryanwen 2012-05-10
  • 打赏
  • 举报
回复
<yhp1888>再做一层封装,不失为一个办法,谢谢! 有没有其他的方法呢 有几十个厂商的SDK 全部封装一遍也是件体力活
Ryanwen 2012-05-10
  • 打赏
  • 举报
回复
谢谢各位的回复

<ream238>的方法是我最先尝试的,对于大厂商可以这么实现,但是现在高清摄像机厂商太多太泛滥了,有些厂商的SDK命名空间后,编译就出错,只好作罢了

<Saleayas>的方法如何解决结构定义冲突的问题呢? 现在库的加载并没有问题
yhp1888 2012-05-10
  • 打赏
  • 举报
回复
最好的办法是,把不同厂家的SDK分别封装成不同的类或DLL或LIB。
Saleayas 2012-05-10
  • 打赏
  • 举报
回复
如果你要使用不可预知的 SDK 和 库,最好使用动态加载。
类似于 COM 。
ArcRain 2012-05-10
  • 打赏
  • 举报
回复
在这些文件的定义里加个NAMESPACE名空间,使用时根据名空间区别开来。
三条猫 2012-05-10
  • 打赏
  • 举报
回复
是个纠结的问题...mark,看看高人怎么解决
Ginie 2012-05-10
  • 打赏
  • 举报
回复
这个问题还真有点纠结,如果某一个的结构体用的不多,可以直接修改它给的SDK么,虽然是个笨办法,但是好像这个问题确实比较难弄

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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