취미 프로젝트 애플리케이션 (사전 검색 프로그램)을 플러그인 아키텍처로 전환하여 향후 다른 언어 용으로 모든 종류의 사전을 개발할 수 있도록했습니다. 이 응용 프로그램은 Visual C++에서 Qt (5.0.2)로 개발되었습니다. 나는 사전 플러그인에 대한 인터페이스를 정의하기 위해 응용 프로그램 코드에이 헤더를 추가 :Qt 애플리케이션을 확장하기위한 플러그인 빌드하기
// dict_plugin.h
#ifndef DICT_PLUGIN_H
#define DICT_PLUGIN_H
#include <QtPlugin>
class PluginInterface
{
public:
virtual ~PluginInterface() {}
virtual QString language() const = 0;
virtual class QWidget* ui() const = 0;
};
Q_DECLARE_INTERFACE(PluginInterface, "pl.ksmvision.winona.PluginInterface")
#endif // DICT_PLUGIN_H
다음, 나는 Qt는 비주얼 스튜디오 애드온을 사용하여 플러그인 자체에 대한 "Qt는 라이브러리"템플릿에서 새 프로젝트를 (생성 에서 dll을 만드는 데 사용됩니다. 주요 헤더 파일은 다음과 같습니다
3 :이 빌드 할 때
#ifndef JP_PLUGIN_H #define JP_PLUGIN_H // created by the template to define Q_DECL_EXPORT // and _IMPORT macros but the plugin engine takes // care of that (I think) //#include "jp_plugin_global.h" #include <QObject> #include <QtPlugin> #include <dict_plugin.h> class JpPlugin : public QObject, public PluginInterface { Q_OBJECT Q_PLUGIN_METADATA(IID "pl.ksmvision.winona.JpPlugin") Q_INTERFACES(PluginInterface) public: JpPlugin(); virtual ~JpPlugin(); virtual QString language() const; virtual QWidget* ui() const; }; #endif // JP_PLUGIN_H
, 내 플러그인이 구현 될 것으로 예상되는 인터페이스를 지정하는 Q_INTERFACES 라인 MOC에서 오류가 발생합니다 > ------ 빌드 시작 : 프로젝트 : jp_plugin, 구성 : Debug Win32 ------
3> Moc'ing jp_plugin.h ...
3> F : \ moje \ src \ cpp \ winona \ build \ jp_plugin \ jp_plugin.h (15) : 오류 : 정의되지 않은 인터페이스
========== 빌드 : 2 개 성공, 1 개 실패, 2 개 최신 e, 0 건너 뛰기 ==========
dict_plugin.h 파일이 포함되기 전에 moc'ing이 실행되는 것처럼 보입니다. 왜냐하면 내가 포함 파일 이름에 오타를 삽입했을 때, 파일이 존재하지 않는다고 불평하지 않고 정의되지 않은 인터페이스에 대한 동일한 오류 메시지로 빌드를 종료합니다.
내가 뭘 잘못하고 있니? 감사.
'#include "dict_plugin.h"'가 아니어야합니까? '<>'헤더는 시스템 헤더입니다. 자신의 헤더가''''에 포함됩니다. – MSalters
아니요. dict_plugin 헤더가 애플리케이션에 속하고 모든 플러그인이 자체 헤더가 아닌 외부 헤더로 포함되기 때문입니다. 게다가, 저는 전처리 기가 어쨌든 요즘에는 모든 헤더에 똑같이 작동하는 것 같지 않습니다. – neuviemeporte
요점을 놓치고 있습니다. MOC는 헤더도 포함해야하며, * IT *는 헤더를 건너 뜁니다. 컴파일러의 전 처리기가 아닙니다. – MSalters