4

我可以将文件中的#ifdef部分.def用于 dll 吗?例如:

LIBRARY "mydll"
EXPORTS
  checkRequirements
  createDevice
  installDriver
  isPastVersionInstalled
  removeDevice
  #ifdef myVar
  doSomethingElse
  #endif
4

2 回答 2

3

不,不可能,它不是经过预处理的文件。尽管我认为您可以通过运行预处理器来生成另一个 .def 文件并链接该文件。

更有效的方法是完全消除对 .def 文件的需要。在应导出的函数的代码中使用 __declspec(dllexport)。然后该代码中的任何#ifdef 将自动确保一个函数既不被编译也不被导出。

于 2012-05-16T11:10:20.257 回答
1

我不知道 .def 文件是否可以完全具有此功能,但您当然可以创建一个名为(例如)的文件mydll.def.in,然后使用编译器预处理器在构建时生成 .def 文件。

在 Linux 上可以这样完成:

cpp -DmyVar=1 mydll.def.in > mydll.def

我想您是在 Windows 上执行此操作的,对此我无能为力,但情况类似。

唯一的问题是,根据您的编译器,您可能需要文件的其余部分包含有效的 C 标记,并且文件中不能有任何可能与宏混淆的符号。Gcc 有一个选项--traditional-cpp可以解决这类问题,而你的编译器可能也有同样的问题。

于 2012-05-16T10:17:50.930 回答