我可以在#ifdef
文件中使用.def
部分作为dll吗? E.g:
LIBRARY "mydll"
EXPORTS
checkRequirements
createDevice
installDriver
isPastVersionInstalled
removeDevice
#ifdef myVar
doSomethingElse
#endif
答案 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
来解决这类麻烦,你的编译器也可能有同样的东西。