dll#ifdef
のファイルでセクションを使用できますか? .def
例えば:
LIBRARY "mydll"
EXPORTS
checkRequirements
createDevice
installDriver
isPastVersionInstalled
removeDevice
#ifdef myVar
doSomethingElse
#endif
dll#ifdef
のファイルでセクションを使用できますか? .def
例えば:
LIBRARY "mydll"
EXPORTS
checkRequirements
createDevice
installDriver
isPastVersionInstalled
removeDevice
#ifdef myVar
doSomethingElse
#endif
いいえ、できません。前処理されたファイルではありません。プリプロセッサを実行して別の .def ファイルを生成し、それをリンクすることでできると思いましたが。
より効果的なアプローチは、.def ファイルを完全に不要にすることです。エクスポートする関数のコードで __declspec(dllexport) を使用します。次に、そのコード内の #ifdef によって、関数がコンパイルもエクスポートもされないことが自動的に保証されます。
.defファイルがそれを正確に持つことができるかどうかはわかりませんが、(たとえば)という名前のファイルを作成しmydll.def.in
、コンパイラプリプロセッサを使用してビルド時に.defファイルを生成することはできます。
Linuxでは、次のように実行されます。
cpp -DmyVar=1 mydll.def.in > mydll.def
あなたがWindowsでこれをやっていると想像します、そして私はそれであなたを助けることができません、しかしそれは似ているでしょう。
唯一の落とし穴は、コンパイラによっては、ファイルの残りの部分を有効なCトークンで構成する必要がある場合があり、マクロと混同される可能性のあるシンボルをファイルに含めてはならないということです。Gccにはこの種の問題を回避するオプション--traditional-cpp
があり、コンパイラーにも同じような問題がある可能性があります。