我可以在.def中使用#ifdef吗?

时间:2012-05-16 10:04:10

标签: dll conditional-compilation function

我可以在#ifdef文件中使用.def部分作为dll吗? E.g:

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

2 个答案:

答案 0 :(得分:2)

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

更有效的方法是完全消除对.def文件的需求。在代码中使用__declspec(dllexport)来处理应该导出的函数。那么该代码中的任何#ifdef都将自动确保函数既不编译也不导出。

答案 1 :(得分:1)

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

在Linux上可以这样做:

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

我想你在Windows上这样做了,我无法帮助你,但它会有类似的。

唯一的问题是,根据您的编译器,您可能需要文件的其余部分由有效的C令牌组成,并且您不能在文件中包含任何可能与宏混淆的符号。 Gcc有一个选项--traditional-cpp来解决这类麻烦,你的编译器也可能有同样的东西。