从Visual C ++ DLL导出非托管班?(Export Unmanaged Classes f

2019-09-21 12:02发布

当创建使用Visual C ++ 2008中的DLL我有一对夫妇的选择。 我可以创建一个“类库”,我的理解,实际上给我一个使用CLI(管理)一个.net库的C ++的extenstion。

因为我不希望出现这种情况,我认为我需要一个静态的.lib文件链接到另一个Visual C ++ Windows可执行文件的项目,我转而选择“Win32项目”,并在应用程序设置面板上,指定一个C ++(无MFC )DLL。

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

这似乎并没有什么我想无论是。 基本上,我正在寻找的是什么将,在C#.NET是一个类库组件的本地C ++相同的。 我想一些类打包成一个DLL,然后有一个.exe项目由包括DLL项目的头文件和链接与.LIB来解析引用使用DLL的类

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

Answer 1:

你这样做是正确的。 你需要什么是标记你的类__declspec(dllexport)的 ,以使他们可以在项目之外。 当您生成项目,你会同时生成一个.DLL和.LIB。



Answer 2:

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

当您生成项目,将存根为你一个导出类,通常命名为C {} MyLib中。



Answer 3:

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

由于C ++的名字得到错位由编译器自动以无奇不值,这是不切合实际的导出为是,如果DLL的客户端,例如,C程序。 但是,如果一切都在C ++中,你应该确定。

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

一个DLL的优点是,当然,如果你使用你的库写几个应用程序,它们都可以共享DLL; 与静态库,他们每一个都包含您的库代码的副本。



Answer 4:

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

个人我还优选出口C函数(相对于C ++)其中I使该指针明确,以避免不必关心编译器具体方法名称修饰并暴露编译器生成的功能。



文章来源: Export Unmanaged Classes from a Visual C++ DLL?