C++クラスライブラリ(.lib)をdllへエクスポートするときの注意

なんとなくそんな気がする程度しか確認していないメモ書きです。

  • C4251警告は無視する
    STLなどtemplate/inlineで定義されているメソッドを確実なものにするためにexportしろって警告です。
    これにまじめに付き合うとえらい面倒なことになるので、定義されているヘッダが確実に同じであるならば無視しても良いはず。
  • __declspec(dllimport)は省略できるが、classのimport時に指定を省略するとstaticメンバ変数(singletonなど)がimportされずにリンクエラーになる。基本的に書いておいた方が無難。
    もしくはexport時にはclassにだけマークし、import時は逆にstaticメンバ変数にだけマークすれば良い。
    ちなみにclass外のただのextern変数も同様なのでimportが必須になる。関数は勝手にimportされる。
  • exportされているものを確認する方法
    $ dumpbin /exports hoge.dll
  • importされているものを確認する方法
    $ dumpbin /imports hoge.exe