MSVC でデバイス ドライバーを作成しています。設計の一環として、さまざまなモジュールを使用したいと考えていますが、モジュールを相互に分離して、将来交換できるようにしたいと考えています。私のデザインには、次の宣言を持つ構造があります
typedef struct tagMODULE_INTERFACE {
NTSTATUS (*initialize)(GLOBAL_DATA *pGD);
NTSTATUS (*shutdown)(void);
NTSTATUS (*sendResponse)(PVOID outBuf, ULONG outBufSz, PULONG outBufLen);
} MODULE_INTERFACE, *PMODULE_INTERFACE;
メインの .c ファイルには、インストール時にロードするメインのモジュール配列があります。次のように定義されています。
MODULE_INTERFACE modules[2] =
{
Module1,
{NULL, NULL, NULL}// terminal entry
};
私のmodule1.cファイルでは、次を公開しています。
CONST MODULE_INTERFACE Module1 = {initializeModule1, shutdownModule1, sendModule1Response};
私のmodule1.hファイルには次のものがあります。
extern CONST MODULE_INTERFACE Module1;
ここでの考え方は、initializeModule1、shutdownModule1、および sendModule1Response 関数を module1.c の外で宣言する必要はありませんが、main.c には、必要に応じて初期化、シャットダウン、およびコールバックに使用する関数ポインターの配列があるということです。
私の問題は、モジュールの Module1 エントリに対して C2099 "initialize is not a constant" エラーが発生し、{NULL, NULL, NULL} エントリに対して C2078 "初期化子が多すぎます" というエラーが発生することです。
ここで何が欠けていますか?私はもともと、module1.c を main.c の前にコンパイルするようにすれば、最初の問題は解決すると思っていましたが、そうではありませんでした。
どんな助けでも大歓迎です。