出口不受管理的课程从一个视觉C++DLL?
-
05-07-2019 - |
题
当创建一个DLL视C++2008我有几个选择。我可以创建一个 "类库", 我了解实际上会给我一个.净图书馆使用CLI(管理)扩展C++.
因为我不想那样,我认为我需要一个静态的。LIB文件的链接进入另一个视觉C++windows可执行的项目,我选择,而不是"Win32项目",对应用程序的设置小组,指定一个C++(没有MFC)DLL。
这将创建一个项目中的一个。cpp文件,该文件是应该在那里我的定义 "出的职能DLL应用程序".
这似乎并不是我想要什么。基本上,我在寻找什么是地C++相当于什么会。净是一类图书馆大会。我想包装一些课程纳入一个问题,然后具有.EXE项目 使用DLL的课程 通过包括DLL项目标题的文件和链接。LIB解决引用。
什么是通常的方式这样做?
解决方案
你做得对。您需要的是使用 __declspec(dllexport)从项目外部提供它们。构建项目时,您将生成.DLL和.LIB。
其他提示
- 创建一个新的项目
- 视觉C++:Win32:Win32项目
- 应用程序设置选择DLL和检查出口的符号"
当你生成的项目,它将根推导出的类,通常叫C{MyLib}.
制作C ++(无MFC)DLL是正确的。您可以创建类,您定义的那些入口点将从该DLL导出以供其他C ++代码使用(例如,用C ++编写的Win32应用程序)。
由于C ++名称会被编译器自动修改为奇怪而美妙的值,因此如果DLL的客户端是C程序,则导出它们是不切实际的。但如果一切都在C ++中,你应该没问题。
如果您创建了一些类,您可以选择将它们动态链接(作为DLL),但您需要一个包含DLL符号定义的导入库(为您自动创建)。您还可以选择静态链接到应用程序中的代码 - 在这种情况下,您最终会得到一个静态库(也是一个.LIB),它包含类中的实际目标代码,而不是DLL中的符号。
DLL的优点当然是,如果使用库编写多个应用程序,它们都可以共享DLL;使用静态库,它们每个都包含库代码的副本。
我认为这篇文章描述了您要做的事情: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx
我个人也更喜欢导出C函数(而不是C ++),我将this指针显式化,以避免必须关心编译器特定的方法名称修饰和公开编译器生成的函数。