我是新的C ++,有件事情我只是完全不明白。 在C#中,如果我想使用一个外部库,log4net的,例如,我只需添加一个参考log4net的DLL和它的成员是自动提供给我(和智能感知)。 我该怎么做,在非托管C ++?
Answer 1:
通常,库带有1)一个头文件(.H)和2)一个文件的.lib除了.dll文件。
头文件是#include'ed在你的代码,给你访问的类型和函数声明在库中。
该.LIB链接到你的应用程序(项目属性 - >连接 - >输入,额外的依赖)。
该文件的.lib通常包含简单的存根自动加载的dll和转发功能调用它。
如果你没有的.lib文件,你就不是必须使用LoadLibrary函数来动态加载DLL。
Answer 2:
基本概念是:有2种类型的库:静态和动态。 它们之间的区别是,在链接生成步骤静态库嵌入他们的编译后的代码在你的可执行文件(或DLL); 动态库只是嵌入指针的功能和一些DLL应PROGRAMM时将要加载的加载指令。 这是由连接器实现了你。
现在,你可以决定这两个,你要使用。 DLL文件有许多优点和缺点。 如果开发一个巨大的应用可能是值得使用的DLL与延迟加载,而不是静态库考虑。 一些库只是提供给您的DLL和你别无选择。 反正对于初学者最简单的方法是使用静态库。 这将使您的部署和测试要容易得多,与DLL打交道时,因为你必须确保它们在运行时发现(即使使用调试器),这涉及到任何一个目录中的一切复制或处理路径变量。
通常一个DLL提供商(如果意图是,你应该能够处理库)提供您一个头文件(S)和包含来电到所需的DLL中的.lib。 一些供应商(如升压),只需要你包含头文件和lib文件被自动链接到你的可执行文件(可通过编译器prorietary编译指令来实现)。 如果不是这样,你必须进入C ++项目的项目设置(项目性质在/配置属性/链接器/输入),然后输入库文件名称为“附加依赖”行,如iced.lib iceutild.lib
。 你也可以把完全合格的路径名出现。 请注意,你必须为两种配置(调试,发布)输入的lib文件名。 这是你与静态库和DLL同样做的程序。 该DLL将需要一个DLL LIB唯一的区别是无论是在你的应用程序目录或在路径的一个目录中。
该步骤之后你,如果你尝试链接不兼容的库仍可能会得到编译器错误。 有许多原因,为什么他们可能不兼容。 但首先尝试链接的lib这样,看看作品。 如果没有,再在这里发表您的错误;)
(是)使用包括文件(S)将被包含在地方,在那里你想使用不便。 从库。 只是包括它和编译器将知道符号必须或者来自另一(编译)编译单元(编译CPP-文件=>对象文件)或.LIB。 这将使查找并通知您,如果找不到需要的符号。
祝好运,
Ovanes
PS这可能在一开始很难,但是当你习惯了它,它会很容易。
Answer 3:
C ++没有在你想的感库。 它头,你的文件#include
,它有东西叫做库,与连接器的交易,其中包含编译后的代码。 你需要的库(.lib文件)添加到链接器设置。
在Windows中,如果您使用的是DLL,理想情况下,你应该有一个.LIB文件去用它被称为导入库为DLL,并且您添加的.lib文件到您的连接设置。
Answer 4:
你需要做的第一件事是#包括描述,在该库中提供的功能的头文件。
该库的实际代码将在2个地方之一:
- 静态库(.LIB)
- 甲DLL(.DLL)
根据库的代码是如何给你(作为.lib文件,或作为一个.dll),你就必须要么:
- 的#pragma评论(LIB, “libraryname.lib”)如果一个.LIB
- 调用LoadLibrary如果一个.dll
有时一个包随附了,你需要链接到的.lib文件和.dll文件。 在这种情况下,你不需要调用LoadLibrary,你只需要你的#pragma评论(LIB,“libaryfile.lib”),因为在这种情况下的.lib链接到.dll文件。
一个非常重要的细节是把DLL您的应用程序可以找到它。 查尔斯Petzold的说:
当Windows运行需要它所需要一个程序之前加载DLL模块,库文件必须存储在包含.EXE程序的目录,当前目录,Windows系统目录,Windows目录,或目录通过访问PATH字符串中的MS-DOS环境。 (该目录中查找的顺序。) Windows程序设计,第5版 MSDN
我不推荐使用项目属性菜单链接,因为它并不像看到哪些库要链接到。
也可以看看