0

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 の前にコンパイルするようにすれば、最初の問題は解決すると思っていましたが、そうではありませんでした。

どんな助けでも大歓迎です。

4

0 に答える 0