dll和头文件问题

ncljh 2008-01-09 02:43:26
工程a 为一个dll

然后工程b为一个exe

现在在b中加载a这个dll,所以要用到lib和a的头文件,

现在的问题是,我加在b中的头文件是不是一定得和a一模一样?
可以有一些不一样吗?
...全文
184 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjfwenwenti 2008-01-09
  • 打赏
  • 举报
回复
当然可以,用到什么就申明什么.
  • 打赏
  • 举报
回复
尽量使用前置声明,将其他都文件在cpp文件中包含.

ncljh 2008-01-09
  • 打赏
  • 举报
回复
b不依赖111,222,333
并且b中也不用那些变量
ouyh12345 2008-01-09
  • 打赏
  • 举报
回复
变量不能去掉。
楼主的程序是隐式连接的,类的变量放在调用程序的空间里,如果位置不对(即增加或减少了变量),则会引起dll hell问题

象这样:
//dll export head file b.h
......

dll内部,
//a.h
#include "111.h"
#include "222.h"
#include "333.h"

#include "b.h"

要保证b不依赖于111、222、333
yutaooo 2008-01-09
  • 打赏
  • 举报
回复

这要看你在b中是如何使用class a的。描述的再具体点。
ncljh 2008-01-09
  • 打赏
  • 举报
回复
是这样的,我在a的里面定义了很多其他东西,并且a的头文件还包括其他头文件.
比如:
a中的头文件格式为:

#include "111.h"
#include "222.h"
#include "333.h"
class a
{
public:
int aa;
int bb;
}

而我在b中的头文件里面:


//#include "111.h"
//#include "222.h"
//#include "333.h"
class a
{
public:
// int aa;
// int bb;
}


但我在b里面用的时候,我用不到111.h,222.h,333.h
因为如果我把他包进来,就必须也把111.h,222.h,333.h也拷贝进来,而我是用不到他们的,所以不想也拷贝过来
还有定义aa,bb我在b中也没有用,所以,我想
b中的头文件相对a中的更改如上,即去除那么几行,可以吗?
  • 打赏
  • 举报
回复
可以不一样,可以只包含你用到的地方.就可以了
yutaooo 2008-01-09
  • 打赏
  • 举报
回复

可以不一样。只要你能保证,使用到的对象(exe要使用到dll中的函数,变量)的符号能够正确匹配。对于没有使用到的,不出现也没啥关系。那么,你又多进行了一些b特有的声明,也是可以的。

但是,这样的方式并不是好的方法。从长久的维护来看,要同时维护两份.h文件,需要精心的保证“那部分”的一致性,会比较累。何必如此,还是再考虑下吧。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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