私は趣味のプロジェクト アプリケーション (辞書検索プログラム) をプラグイン アーキテクチャに切り替えて、将来的に他の言語用にあらゆる種類の辞書を開発できるようにすることにしました。アプリケーションは、Qt (5.0.2) を使用して Visual C++ で開発されています。このヘッダーをアプリケーション コードに追加して、辞書プラグインのインターフェイスを定義しました。
// 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
次に、dll の作成に使用されるプラグイン自体 (Qt Visual Studio アドインを使用) の「Qt ライブラリ」テンプレートから新しいプロジェクトを作成しました。メイン ヘッダー ファイルは次のようになります。
#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 からエラーが発生します。
3>------ ビルド開始: プロジェクト: jp_plugin, 設定: Win32 をデバッグ ------
3> jp_plugin.h を Moc'ing...
3>F:\moje\src\cpp\winona\build \jp_plugin\jp_plugin.h(15): error : Undefined interface
========== ビルド: 2件成功、1件失敗、2件更新、0件スキップ ========= =
dict_plugin.h ファイルがインクルードされる前に moc'ing が行われるように見えます。これは、インクルード ファイル名にタイプミスを導入すると、ファイルが存在しないことを訴えず、同じエラー メッセージでビルドを終了するだけだからです。インターフェイスが未定義であることについて。
私は何を間違っていますか?ありがとう。