我有一个基类(QIndicator
),我想在DLL中实现派生类。在Visual Studio 2012 DLL项目用于样本的派生类具有以下的代码:与基类尽管正确的dllExport没有功能导出到DLL - Visual Studio
头文件
#ifndef _DLL_COMMON_INDICATOR_
#define _DLL_COMMON_INDICATOR_
// define the DLL storage specifier macro
#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
class QIndicator
{
private:
int x;
int y;
};
extern "C"
{
// declare the factory function for exporting a pointer to QIndicator
DECLDIR QIndicator * __stdcall getIndicatorPtr(void);
}
#endif
源文件与派生类
#define DLL_EXPORT
#include "indicator.h"
class QIndicatorDer : public QIndicator
{
public:
QIndicatorDer (void) : QIndicator(){};
~QIndicatorDer (void){};
private:
// list of QIndicatorDer parameters
int x2;
int y2;
};
extern "C"
{
DECLDIR QIndicator * __stdcall getIndicatorPtr(void)
{
return new QIndicatorDer();
};
}
的我的问题是成功构建后,生成的DLL文件不包含导出的getIndicatorPtr
函数(如DependencyWalker所示)。我检查了dllexport
关键字是否正确传播到getIndicatorPtr
的声明中。
另一个有趣的问题是,我已经在另一个DLL项目中有另一个派生类,就像我在几个月前创建的那样。这个较老的项目基本上是一样的,一切都很好。我检查了旧项目和当前项目的所有属性,它们看起来完全相同。所以我用完了想法,为什么我不能得到getIndicatorPtr
导出。
任何帮助是非常赞赏, 丹尼尔
为什么在这里使用'__stdcall'? – BitTickler 2015-04-06 13:10:35
“QIndicator”类未导出。您也需要导出课程。 – BitTickler 2015-04-06 13:12:23
在教程中发现它,诚实地(尝试所有知道互联网来解释这个DLL行为)..没有它的工作。 – 2015-04-06 13:12:52