c++ - 如何包含 DLL 的类?

标签 c++ c++11 visual-c++ dll include

我是在 C++ 中使用 DLL 的新手,我想知道如何成功地加载和使用 DLL 中包含的类而不会出现“损坏的堆栈”、“空指针”或任何应用程序崩溃 ^^。现在这让我有点困惑。 即使它可能更安全,我也不想使用接口(interface)类,因为它使用起来似乎太复杂了。我知道我应该在 DLL 和应用程序中包含相同的内容以防止崩溃。这意味着我的包含文件应该提到成员的名字。

这是问题所在:

I want to distribute my software (DLL + include file) and I don't want my customers to see the architecture of my project. But the only class I want to export from my DLL has as member, objects from other classes. So my class is dependent of other classes and so on in cascade.

是否有可能只提供一个类的一个包含文件,只提供有用的方法而不会有崩溃的风险?如果否,哪些解决方案可能适合我的需求?

谢谢

最佳答案

首先,如果您在 DLL 和使用它的应用程序中使用相同的包含,如果两者都是使用相同的编译器和兼容设置编译的,并且都使用相同的运行时库(DLL 一个,不是静态链接),你应该没有你害怕的问题。

如果您想隐藏 DLL 的详细信息并向 DLL 用户提供经过更改的简化 header ,您需要自行承担风险。例如,如果缺少数据成员(甚至是私有(private)的)或者缺少虚函数(甚至是私有(private)的),那么它可能会崩溃,或者更糟的是,在不被注意的情况下破坏某些东西。所以我强烈建议您不要考虑这种方法,除非您对编译器生成的汇编程序非常有经验。

如果您想隐藏类的实现细节,最好的方法可能是围绕 PIMPL idiom 设计您的库。 .

关于c++ - 如何包含 DLL 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950563/

相关文章:

c++运算符关联性/字符串连接/移动语义

c++ - C++ 中将成员函数绑定(bind)到对象实例的函数

c++ - 需要 Volume Shadow Copy API 来卡住 Exchange Writers

c++ - 如何从窗口获取像素数据\像素缓冲区并提取 RGB?

c++ - 花括号和圆括号之间的参数评估顺序

c++ -++iterator 和 iterator++ 之间的性能差异?

c++ - 为什么构造 std::thread 时参数 move 了两次

c++ - 用C中的文本文件的内容初始化一个数组

c++ - 如何在 VC++ 2005 中使用 OpenProcessToken、AdjustTokenPrivileges 和 GetExitCodeProcess

python 无法理解通过 Winsock 发送的 C++ 字符串