【发布时间】:2021-09-12 07:51:42
【问题描述】:
最终我的目标是编写一个 Qt 类(我的类继承自 QObject 并使用 Q_OBJECT 宏),然后从中构建一个 dll。然后在 python 中使用 ctype 来访问该 dll。
当我正常编写 dll 时,方法名称会被破坏,因此我无法直接使用它们。相反,我必须使用我不想使用的getattr(因为其他人可能需要使用 dll 而我不想让他们感到困惑)。
无论如何,我读到要停止名称混乱,我需要使用 extern "C"
到目前为止,我尝试了这些:
extern "C"
{
class MyClass::public QObject
{
Q_OBJECT
public:
void SomeFunction(int Parameter);
}
}
这个没有构建,因为在 Q_OBJECT 中使用了宏模板,我得到“模板不能被声明为具有 'C' 链接”错误。
我试过了:
extern "C" typedef void SomeFunction_t(int parameter);
class MyClass::public QObject
{
Q_OBJECT
public:
SomeFunction_t SomeFunction;
}
这个已编译但仍然SomeFunction 名称被损坏;
我也不能在方法声明之前直接使用extern "C",因为它在类内部。
那么我怎样才能防止这里的名称损坏呢?
【问题讨论】:
标签: c++ qt dll ctypes calling-convention