我仍然是C ++的新手,我试图了解静态库和DLL。我刚刚继承了一些代码,并想知道是否有人可以给我一个澄清。
继承的代码包含两个库项目,称它们为a和b。还有一个主项目,它使用两个库中的类。
我感到困惑的是:项目a和项目b,在构建时,输出.dll到" .. \。\ Executables"和.lib到" .. \ Shared \ Lib"。主项目的stdafx.h包括库a,其代码如下:
#include ..\projectA\a_class.h
#pragma comment( lib, "..\\Shared\\Lib\\projectA.lib" )
...它使用以下代码包含库b:
#import "..\..\Executables\projectB.dll"
然后它使用来自两个库的类。两者有什么区别?为什么当我尝试使用方法B包含库A时,它不起作用(类不可访问)?
提前致谢!
答案 0 :(得分:2)
他们做不同的事情。使用#import
导入类型库并为COM对象生成包装类。类型库可以是tlb
或者可以封装在dll
中(或作为ocx
与不同名称相同的事实)的事实令人困惑。你唯一遗漏的是#import
只与COM有关。
“普通”#pragma comment(lib, "blah.lib")
- 用于在项目属性中定义其他库的替代方法 - 用于链接到静态或动态库,仅用于导入lib本身导出的函数和符号。没有生成包装类,它与COM无关。
您可以详细了解#import
at MSDN here以及#pragma
选项at MSDN here的更多信息。