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

Dll 我可以在.def中使用#ifdef吗?,dll,conditional-compilation,function,Dll,Conditional Compilation,Function,我可以为dll使用.def文件中的#ifdef部分吗?例如: LIBRARY "mydll" EXPORTS checkRequirements createDevice installDriver isPastVersionInstalled removeDevice #ifdef myVar doSomethingElse #endif 我不知道.def文件是否可以准确地包含该文件,但是您当然可以创建一个名为(例如)mydll.def.in的文件,然后在构建

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

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

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

在Linux上,可以这样做:

cpp -DmyVar=1 mydll.def.in > mydll.def
我想你是在Windows上做这件事的,我帮不了你,但也会是类似的


唯一的问题是,根据编译器的不同,您可能需要文件的其余部分由有效的C标记组成,并且文件中不能有任何可能与宏混淆的符号。Gcc有一个选项
——传统的cpp
,可以避免此类问题,您的编译器可能也有类似的问题。

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


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

这看起来很有希望,您可以使用此方法给出一个函数声明示例吗?这在MSDN库中有很好的文档记录,有示例,请务必先查看。