调用其他dll的项目生成的dll问题

qq_17307063 2017-08-02 11:41:25
题目描述不清楚,具体情况如下:
Windows vs2013环境,C++。
A项目非常大,无法封装成dll,而我只用到其中的一小部分,我新建了一个B项目(dll项目),B项目连接到A项目release的lib和.h,B项目中打开了A中的头文件A.h,写了一个Proxy类,然后生成B.dll,然后新建C项目,把B.dll,B.lib,Proxy.h添加到C项目中,但是C项目的外部依赖项中的Proxy.h报错,原因是无法打开A项目中的头文件A.h。

简单来说是项目C中引用了B.dll,生成B.dll的过程中引用了A.h,但是C项目中显示无法打开A.h。

这个问题如何解决,很急,多谢了。
...全文
362 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
trytry1992 2017-08-03
  • 打赏
  • 举报
回复
引用 6 楼 qq_17307063 的回复:
[quote=引用 5 楼 trytry1992 的回复:] [quote=引用 4 楼 qq_17307063 的回复:] [quote=引用 2 楼 adlay 的回复:] Proxy.h 不要引用 A.h, 用到的 A.h 中的类都使用前置声明自己声明一遍. Proxy.cpp 中可以引用 A.h
Proxy.h中就什么都不写吗?可是这样的话在C中使用Proxy类中的方法,会提示Proxy类中没有方法。[/quote] 是Proxy.h里不要引用A的头文件,Proxy是怎么样的还是跟原来一样[/quote] Proxy.h中定义的成员用到了A的头文件,如果不引用A头文件还是会报错。[/quote] 可以把成员放到cpp里去定义,参考PIMPL
qq_17307063 2017-08-03
  • 打赏
  • 举报
回复
引用 5 楼 trytry1992 的回复:
[quote=引用 4 楼 qq_17307063 的回复:] [quote=引用 2 楼 adlay 的回复:] Proxy.h 不要引用 A.h, 用到的 A.h 中的类都使用前置声明自己声明一遍. Proxy.cpp 中可以引用 A.h
Proxy.h中就什么都不写吗?可是这样的话在C中使用Proxy类中的方法,会提示Proxy类中没有方法。[/quote] 是Proxy.h里不要引用A的头文件,Proxy是怎么样的还是跟原来一样[/quote] Proxy.h中定义的成员用到了A的头文件,如果不引用A头文件还是会报错。
trytry1992 2017-08-03
  • 打赏
  • 举报
回复
引用 4 楼 qq_17307063 的回复:
[quote=引用 2 楼 adlay 的回复:] Proxy.h 不要引用 A.h, 用到的 A.h 中的类都使用前置声明自己声明一遍. Proxy.cpp 中可以引用 A.h
Proxy.h中就什么都不写吗?可是这样的话在C中使用Proxy类中的方法,会提示Proxy类中没有方法。[/quote] 是Proxy.h里不要引用A的头文件,Proxy是怎么样的还是跟原来一样
qq_17307063 2017-08-03
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:
Proxy.h 不要引用 A.h, 用到的 A.h 中的类都使用前置声明自己声明一遍. Proxy.cpp 中可以引用 A.h
Proxy.h中就什么都不写吗?可是这样的话在C中使用Proxy类中的方法,会提示Proxy类中没有方法。
trytry1992 2017-08-03
  • 打赏
  • 举报
回复
不要在B的头文件里引用A的头文件,仅在源文件里引用就好,把A藏在B里,C只看得见B
www_adintr_com 2017-08-03
  • 打赏
  • 举报
回复
Proxy.h 不要引用 A.h, 用到的 A.h 中的类都使用前置声明自己声明一遍. Proxy.cpp 中可以引用 A.h
www_adintr_com 2017-08-03
  • 打赏
  • 举报
回复
引用 6 楼 qq_17307063 的回复:
[quote=引用 5 楼 trytry1992 的回复:] [quote=引用 4 楼 qq_17307063 的回复:] [quote=引用 2 楼 adlay 的回复:] Proxy.h 不要引用 A.h, 用到的 A.h 中的类都使用前置声明自己声明一遍. Proxy.cpp 中可以引用 A.h
Proxy.h中就什么都不写吗?可是这样的话在C中使用Proxy类中的方法,会提示Proxy类中没有方法。[/quote] 是Proxy.h里不要引用A的头文件,Proxy是怎么样的还是跟原来一样[/quote] Proxy.h中定义的成员用到了A的头文件,如果不引用A头文件还是会报错。[/quote] 不要在 Proxy.h 值直接使用 A 中定义的类来定义对象, 全部用指针, 这样就可以只需要前置声明就可以了.
棉猴 2017-08-03
  • 打赏
  • 举报
回复
是不是要把A.dll和A.lib也要拷贝到与B.dll、B.lib相同的路径下?
赵4老师 2017-08-03
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George 前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题: ◆“要保证这个问题不会再出现,我该怎么做?” ◆“要想少出些Bug,我该怎么做?” ◆“要保证Bug容易被修复,我该怎么做?” ◆“要保持对变化的快速响应,我该怎么做?” ◆“要保证我的软件的运行速度,我该怎么做?” 如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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