为什么我们需要在 C++ 中导出一个类?
我是一个初学者,所以,如果这听起来太微不足道,请耐心等待。当我在网上搜索这个时,我得到的结果显示了如何做到这一点。我的问题是我们为什么要这样做?
I am a beginner, so, please bear with me, if this sounds too trivial.When i searched over the net for this, i got results showing how to do it. My question is why we do it in the first place ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当您开发 C++ DLL 时,这是特定于 Windows 平台的。
您必须使用 __declspec(dllexport) 修饰符才能使您的类及其方法出现在 DLL 的导出符号列表中。
这样,使用 DLL 的可执行文件就可以实例化并调用这些类中的方法。
但是,您必须确保可执行文件和 DLL 是由同一编译器的相同版本编译的,因为 C++ 符号是使用相对复杂的名称修饰编码导出的(您可以看到使用 depends.exe),其格式因编译器而异。
This is specific to the Windows platform, when you're developping C++ DLLs.
You have to use the __declspec(dllexport) modifier in order for your class and its methods to appear on the exported symbol list for your DLL.
This way, executables using your DLL can instanciate and call methods in these classes.
However you have to make sure that the executable and the DLL are compiled by the same version of the same compiler, because C++ symbols are exported using a relatively complex name mangling encoding (you can see that using depends.exe), which format varies from one compiler to another.
您不需要导出任何内容,除非您要创建 DLL。在这种情况下,您可以使用 dllexport属性作为使用 的“老派”方式的替代方法.def 文件。
You don't need to export anything, unless you're creating a DLL. In that case, you can use the dllexport attribute as an alternative to the "old school" way of using .def files.
从技术上讲,您不能导出类,只能导出函数。
但是,您可以在类级别指定导出所有函数。
导出函数意味着可以从当前可执行文件的外部调用该函数。
例如,当您编写 dll 时,这是需要的,它是一个单独的实体。
Technically you cannot export a class, only functions.
However you can designate on a class level that all functions be exported.
Exporting a function means that that function can be called from outside of the current executable.
This is needed when you are writing a dll for example which is a separate entity.