- 主题:程序能只引用另一项目DLL编译吗?
目前的项目是编译为dll,在目标程序中运行。
但是项目越来越庞大,对于架构有新的认识,而且后续开发可能会涉及与多人合作,为了避免核心功能的频繁或者不小心改动,准备把基础功能抽出来做成一个类似平台的DLL(暂称为a)。然后项目引用此DLL a编译成DLL b。目标程序运行DLL b。
那么问题是:如何拆分原项目,让DLL b在编译的时候只需要DLL a这个文件即可?找到的资料大多都是说要同时提供DLL a和DLL a项目的头文件?有没有做过的给个详细点的步骤?谢谢。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
谢谢回复。
a准备做成基础功能性DLL,让b来使用。
b其实是最终的DLL,提供给用户exe使用。
现在的项目等于是a+b=dll
我想分成2个DLL,但是没弄过2个DLL互相调用的情况。一个的时候直接在vs里面选择目标是DLL就行了。2个的时候,直接让第二个b的项目引用a的头文件,但是a怎么加载给b,让b调用呢?
【 在 z16166 @ [CPlusPlus] 的大作中提到: 】
:
: 没看懂这是啥意思
:
: 不管怎么拆分,b都只会依赖于a的啊。难道你还要拆一个c出来?
:
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
非常感谢,我把那个书找来看看。
我准备分出来的a是基础库,用来提供通用功能。但是如果依赖lib,那不是把a做成了静态库?这样b引用头文件和lib后,直接就编译成结果DLL了,运行时不应该需要a了吧?
因为我目前的项目,就是引用了第三方lib,但是编译后的DLL运行时并不需要其他dll。
如果我的a做成静态库得到lib,那么b依赖a就如同我目前依赖第三方lib一样,编译好b运行时应该不需要a的dll了。
不知道理解的对不对,请多多指教。
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: a是基础库非界面的话,依赖a的头文件和.lib。 这不妨碍你的目标:基础功能不频繁改动。假装这是别的部门/公司提供的模块。运行时才需要dll。
:
: a是含界面的核心功能的话(框架),典型的插件机制,a对b一无所知。
: a启动时,读入配置文件如json中的*.dll,然后依次LoadLibrary,p=findSymbol,调用p。p的存在是一种人的约定,没有编译器的约束。这种情况,b未依赖a,不符合你的描述。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
还有网上很多说法跟你的一样,要loadlibrary后findsymbol。那我要是有几百个函数,那不是每个都写findsymbol?这样写b的代码好累,不断的找a的函数。
那还不如把a做成静态库,让b引用a的头文件后直接编译成目标DLL算了。这样起码写代码的时候,a的导出函数都对b可见
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: a是基础库非界面的话,依赖a的头文件和.lib。 这不妨碍你的目标:基础功能不频繁改动。假装这是别的部门/公司提供的模块。运行时才需要dll。
:
: a是含界面的核心功能的话(框架),典型的插件机制,a对b一无所知。
: a启动时,读入配置文件如json中的*.dll,然后依次LoadLibrary,p=findSymbol,调用p。p的存在是一种人的约定,没有编译器的约束。这种情况,b未依赖a,不符合你的描述。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
OK,马上去读书,谢谢
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: 先去读Windows技术内幕里那几章吧,完了豁然开朗。
: 你这是概念性问题,自己提了假问题。
: 【 在 one4all4one 的大作中提到: 】
: : 还有网上很多说法跟你的一样,要loadlibrary后findsymbol。那我要是有几百个函数,那不是每个都写findsymbol?这样写b的代码好累,不断的找a的函数。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
多谢指导。感觉自己差的太多,急需提高。
你指出的几个问题,我还不是太懂,虽然自己做DLL给目标程序使用,但是因为是二次开发,按照模板弄弄,自己写逻辑代码即可。没有对这些加载关系的理解。
目前是单线程运行,将来分成2个DLL后考虑用openmp并行一下某些循环。估计不可能做再深了,再多就不会了。
自己申请自己释放是不是就类似于new和delete要成对出现?我准备在a里面搞成类,带上try...catch,需要类对象维持的变量,构造函数申请内存,析构函数释放。成员函数自己需要的,自己申请自己释放。这样可行吗?
【 在 z16166 @ [CPlusPlus] 的大作中提到: 】
:
: VC生成的有两种lib,
: 一种是静态lib(包含全部代码和链接信息);
: 一种只是用来导入dll函数的lib(包含链接信息,无代码)。
:
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
目前脑子还不清楚,还没搞成a和b分离。
所以先来问问能不能搞成分离的,难度大不大。等我试验下再来汇报。本版藏龙卧虎高手如云,谢谢大家的意见和建议。
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: 此.lib是与dll配套的,里面只有简单的对于dll的描述,用于链接时让连接器扫描符号。
:
: b运行时,体内含依赖的dll信息,如a.dll。操作系统会帮你加载起来,并重定位。
: 常见的错误:系统中无法找到xx.dll,即是此过程。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
这本书你有吗?名字完全一样不?我找来找去都是驱动程序技术内幕
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: 先去读Windows技术内幕里那几章吧,完了豁然开朗。
: 你这是概念性问题,自己提了假问题。
: 【 在 one4all4one 的大作中提到: 】
: : 还有网上很多说法跟你的一样,要loadlibrary后findsymbol。那我要是有几百个函数,那不是每个都写findsymbol?这样写b的代码好累,不断的找a的函数。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
求分享。我找不到这书下载地址
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: 19章 Dll Basics 第三节 The overall picture
: 一共几页,很快就读完了。我当时读的时候欢喜的很。这书真是好书,作者真是专家。可惜的是绪言里作者预判native开发气数已尽,去搞托管语言了,令我唏嘘不已。我学习练习的东西可能拾人牙慧都算不上,难以望其项背的感觉。
: 【 在 one4all4one 的大作中提到: 】
: : 还有网上很多说法跟你的一样,要loadlibrary后findsymbol。那我要是有几百个函数,那不是每个都写findsymbol?这样写b的代码好累,不断的找a的函数。
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*
多谢,找了本PDF,先解决实际问题再买书
【 在 DoorWay @ [CPlusPlus] 的大作中提到: 】
:
: 我说错书名,是 Windows核心编程,英文名 Windows via C/C++
: 我说错译名,不好意思。—— 这书网上流传很多。也值得买一本。
: 【 在 one4all4one 的大作中提到: 】
: : 求分享。我找不到这书下载地址
#发自zSMTH@一代鸡皇水果iPhone 250 MAX
--
FROM 82.19.154.*