我正在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;
这里的想法是我不必在module1.c之外声明initializeModule1,shutdownModule1和sendModule1Response函数,但是main.c将有一个函数指针数组,用于在必要时初始化,关闭和回调。
我的问题是我在模块中的Module1条目中获得了C2099“初始化不是常量”错误,并且我为{NULL,NULL,NULL}条目获得了C2078“太多初始化器”。 / p>
我在这里缺少什么?我原本以为如果我确保在main.c之前编译module1.c它将解决第一个问题,但它没有。
非常感谢任何帮助。