3

使用 Visual C++ 2008 创建 DLL 时,我有几个选择。我可以创建一个“类库”,据我所知,它实际上会给我一个使用 C++ 的 CLI(托管)扩展的 .Net 库。

因为我不希望这样,并且我假设我需要一个静态 .LIB 文件来链接到另一个 Visual C++ windows 可执行项目,所以我选择“Win32 Project”,并在“应用程序设置”面板上指定一个 C++(没有 MFC ) DLL。

这将创建一个带有 .cpp 文件的项目,该文件应该是我定义“DLL 应用程序的导出函数”的地方。

这似乎也不是我想要的。基本上,我正在寻找的是本机 C++ 等价物,在 C# .NET 中是类库程序集。我想将一些类打包到 DLL 中,然后让 .EXE 项目通过包含 DLL 项目头文件并链接到 .LIB 来使用 DLL 的类来解析引用。

这样做的通常方法是什么?

4

4 回答 4

4

你做对了。您需要使用__declspec(dllexport)标记您的类,以使它们可从项目外部使用。构建项目时,您将生成一个 .DLL 和一个 .LIB。

于 2009-07-30T18:09:04.353 回答
1
  • 创建一个新项目
  • Visual C++:Win32:Win32 项目
  • 应用程序设置选择 DLL 并选中“导出符号”

当您生成项目时,它会为您生成一个导出的类,通常命名为 C{MyLib}。

于 2009-07-30T18:11:25.377 回答
1

制作 C++(无 MFC)DLL 是对的。您可以创建您的类,您定义的那些入口点将从该 DLL 中导出,以供其他 C++ 代码使用(例如,用 C++ 编写的 Win32 应用程序)。

由于 C++ 名称会被编译器自动修改为奇怪而奇妙的值,因此如果 DLL 的客户端是 C 程序等,就不能将它们按原样导出。但如果一切都在 C++ 中,你应该没问题。

如果您创建一些类,您可以选择将它们动态链接(作为 DLL),但您需要一个包含 DLL 符号定义的导入库(为您自动创建)。您还可以选择从应用程序静态链接到您的代码 - 在这种情况下,您最终会得到一个静态库(也是一个 .LIB),其中包含类中的实际目标代码,而不是 DLL 中的符号。

当然,DLL 的优势在于,如果您使用库编写多个应用程序,它们都可以共享 DLL;使用静态库,它们每个都包含您的库代码的副本。

于 2009-07-30T18:11:33.660 回答
1

我认为这篇文章描述了你正在尝试做的事情:http: //www.codeproject.com/KB/mcpp/usingcppdll.aspx

就我个人而言,我也更喜欢导出 C 函数(而不是 C++),在该函数中我使 this 指针显式,以避免必须关心编译器特定的方法名称修饰和暴露编译器生成的函数。

于 2009-07-30T18:13:22.627 回答