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;

这里的想法是我不必在 module1.c 之外声明 initializeModule1、shutdownModule1 和 sendModule1Response 函数,但 main.c 将有一个函数指针数组,用于在必要时进行初始化、关闭和回调。

我的问题是模块中的 Module1 条目出现 C2099“初始化不是常量”错误,而 {NULL, NULL, NULL} 条目出现 C2078“初始化器太多”。

我在这里想念什么?我原本以为,如果我确保 module1.c 在 main.c 之前编译,它将解决第一个问题,但事实并非如此。

任何帮助将不胜感激。

4

0 回答 0