4

dll#ifdefのファイルでセクションを使用できますか? .def例えば:

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 に答える