2009-07-30 116 views
3

使用Visual C++ 2008创建DLL时,我有几个选择。我可以创建一个“类库”,据我了解,它实际上会给我一个使用C++的CLI(托管)扩展的.Net库。因为我不想这样做,而且我假设我需要一个静态.LIB文件来链接到另一个Visual C++ Windows可执行项目,我选择“Win32 Project”,然后在“应用程序设置”面板上指定一个C++(无MFC)DLL。从Visual C++ DLL导出非托管类?

这将创建这应该是在那里我定义“导出函数的DLL应用” .cpp文件的项目。

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

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

回答

4

你做得对。你需要的是用__declspec(dllexport)来标记你的课程,使它们可以在项目之外使用。当您构建项目时,您将生成.DLL和.LIB。

+0

太好了。而另一方面导入类似的方法? – Buggieboy 2009-07-30 18:12:39

1
  • 创建一个新的项目
  • 的Visual C++:Win32的:Win32项目
  • 应用程序设置中选择DLL和检查“导出符号”

当您生成项目,将存根出来的导出类,通常命名为C {MyLib}

1

你是正确的做一个C++(没有MFC)的DLL你可以创建你的类,那些你定义的入口点将从那个DL L供其他C++代码使用(例如,用C++编写的Win32应用程序)。

由于C++名称会被编译器自动修改为奇怪和奇妙的值,因此如果DLL的客户端是C程序那样导出它们是不现实的。但是如果一切都用C++编写,那么你应该没问题。

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

当然,DLL的优点在于,如果使用库编写多个应用程序,它们都可以共享该DLL;与一个静态库,他们将分别包含您的库代码的副本。

1

我觉得这篇文章介绍了什么是你正在尝试做的: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

我个人也比较喜欢出口的C函数(相对于C++),我做这个指针出来,避免用户不必关心具体的编译器方法名称修饰和暴露编译器生成的函数。