首页 文章

C Visual Studio DLL文件

提问于
浏览
0

我的目标是创建一个DLL和lib文件,所以我正在关注this guide
1)我在VS中创建了一个新的win32控制台应用程序项目,选择了DLL作为'Application Type'和Emptied Project
2)我正在尝试用C创建一个数据库 . 所以我有5个 Headers 只有ONLY函数声明 .
3)Database.h是我的顶级 Headers ,它看起来像这样:

#ifdef DBDLL_EXPORTS
#define DBDLL_API __declspec(dllexport) 
#else
#define DBDLL_API __declspec(dllimport) 
#endif
#ifndef __Database_H
#define __Database_H


#include "Table.h"

class DBDLL_API Database { ... };
#endif

4)现在只有 Headers ,我尝试编译项目 . 它编译但我没有在项目文件夹中的任何地方看到任何DLL或Libs . 我该如何创建它们?

1 回答

  • 3

    这是因为头文件没有被编译 - 只编译了CPP文件(它引入了头文件 - 一个源文件,它所引入的所有头文件称为“翻译单元”,这是实际编译的东西(独立于其他TU)) .

    因此,实际上,构建系统认为您正在构建一个空项目,在这种情况下根本不生成任何内容 . 请注意,即使引入并编译了标头,除非在某处实际引用了导出的符号,否则可以对其进行优化 . 在这种情况下,你将得到一个(空的)DLL,但是没有 .lib 文件(如果你有依赖项目在DLL中有任何东西之前找到这个 .lib ,那么这会导致错误 . )

    您需要创建一些CPP文件来实现标头中声明的功能 . 如果 Headers 中包含所有内容并且根本不需要任何CPP文件,那么拥有DLL就没有意义了! (因为您可以在任何其他项目中包含标头而无需任何其他依赖项 . )

    最后,你的包含守卫( #ifndef ... )应该包含整个 Headers ,包括DLL导出宏,否则你最终会得到宏重定义警告 .

    我建议使用 #pragma once 而不是包含警卫,因为它需要's simpler and recognized by pretty much every compiler. I would also put the DLL macro goop into its own header (e.g. 1442814 ) and include that where it'(这将减少重复) .

相关问题