实际上,该问题已在主题标题中描述。它是真的吗(当然跨平台的方法很有趣)。我想怎么做:
#ifdef Q_OS_WIN
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT
#endif
class Export
{
public:
static DLLEXPORT void createLine() {...}
};
我试图打电话给:
using LibraryType = void(*)();
QLibrary lib("dynamic_library");
LibraryType creatorLine = reinterpret_cast<LibraryType>(lib.resolve("createLine"));
if(!creatorLine)
{
// увы, метод не найден
}
此方法在 MSVS 17 - 19 中成功运行,并添加了一个 .def 文件。它在 QT 中不起作用。也许还需要一个 .def 文件,但我不知道如何将其添加到 QT。指导如何正确导出。谢谢你。
PS:由于某些未知原因,QLibrary::isLoaded()const 方法总是返回 false,即使库已成功加载(在 OS Win 中,我还没有检查其他方法)。我是QT的新手,所以我不熟悉它。
PSS:我使用依赖查看器检查了 dll,发现静态方法的名称被编译器破坏了。问题的一个小更正:如何在“销售表单”中保留静态方法的名称,同时只使用OOP(不欢迎个别功能)?
我假设没有足够的方法调用
load
从类中导出方法时,对它们应用所谓的修饰。为了获得方法的名称,您需要知道它,这可以在调试期间使用常量来完成
__func__
,或者查看类中的所有导出函数。并寻找你需要的东西。对于编译器
VS
:对于
MinGW
,见这里。也可以使用命名空间来代替类,因此可以使用
__cdecl
来存储函数名。