Visual c++ 从Visual C++ DLL导出非托管类? 当使用Visual C++ 2008创建DLL时,我有两个选择。我可以创建一个类库,我理解它实际上会给我一个.NET库,它使用CLI管理的C++扩展。 因为我不想这样,我假设我需要一个static .LIB文件链接到另一个VisualC++窗口可执行项目,我选择了Win32项目,在应用程序设置面板上指定C++没有MFC DLL。

Visual c++ 从Visual C++ DLL导出非托管类? 当使用Visual C++ 2008创建DLL时,我有两个选择。我可以创建一个类库,我理解它实际上会给我一个.NET库,它使用CLI管理的C++扩展。 因为我不想这样,我假设我需要一个static .LIB文件链接到另一个VisualC++窗口可执行项目,我选择了Win32项目,在应用程序设置面板上指定C++没有MFC DLL。,visual-c++,dll,class-library,name-decoration,Visual C++,Dll,Class Library,Name Decoration,这将创建一个带有.cpp文件的项目,该文件应该是我为DLL应用程序定义导出函数的地方 这似乎也不是我想要的。基本上,我所要寻找的是C++中与C.NET中的类为类库程序集的本机C++等价物。我想将一些类打包到DLL中,然后让.EXE项目通过包含DLL项目头文件并与.LIB链接来解析引用,从而使用DLL的类 通常的做法是什么?你做得对。您需要的是用标记您的类,以使它们在项目外部可用。构建项目时,将同时生成.DLL和.LIB 创建新项目 Visual C++:Win32:Win32项目 应用程序设置选

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

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


通常的做法是什么?

你做得对。您需要的是用标记您的类,以使它们在项目外部可用。构建项目时,将同时生成.DLL和.LIB

创建新项目 Visual C++:Win32:Win32项目 应用程序设置选择DLL并选中“导出符号”

当你生成项目时,它会为你挖掘出一个导出类,通常称为C{MyLiB}。

< P>你可以做一个C++的MFC DLL。您可以创建类,并且您定义的入口点将从DLL导出,供其他C++代码使用,例如,用C++编写的Win32应用程序。 < >由于C++名称自动被编译器错误地翻译成奇异的值,所以如果DLL客户端是C程序,那么导出它们是不实际的。但是如果一切都在C++中,你应该没事。 如果创建某些类,可以选择将它们作为DLL动态链接,但需要为您自动创建一个包含DLL符号定义的导入库。您还可以选择从应用程序静态链接到您的代码-在这种情况下,您将得到一个静态库,也就是一个.LIB,它包含类中的实际对象代码,而不是DLL中的符号


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

我认为本文描述了您正在尝试执行的操作:


我个人也更喜欢导出C函数,而不是C++,在这里我明确地指出了这个指针,以避免关心编译器特定的方法名称修饰和暴露编译器生成的函数。另一方面,还有一种类似的导入方法?看看自动生成的代码是做什么的。它实际上是基于预编译器指令对dllexport/import进行宏操作,这样消费者就不必考虑导入与导出。请参阅我的答案,以了解ctacke所说的内容。谢谢。这澄清了向导生成的头文件中的注释。