#pragma comment(lib)v #import?

时间:2014-01-27 10:32:43

标签: c++ visual-studio-2010 dll static libraries

我仍然是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时,它不起作用(类不可访问)?

提前致谢!

1 个答案:

答案 0 :(得分:2)

他们做不同的事情。使用#import导入类型库并为COM对象生成包装类。类型库可以是tlb或者可以封装在dll中(或作为ocx与不同名称相同的事实)的事实令人困惑。你唯一遗漏的是#import只与COM有关。

“普通”#pragma comment(lib, "blah.lib") - 用于在项目属性中定义其他库的替代方法 - 用于链接到静态或动态库,仅用于导入lib本身导出的函数和符号。没有生成包装类,它与COM无关。

您可以详细了解#import at MSDN here以及#pragma选项at MSDN here的更多信息。