ひきこもりプログラマ

C++のこととか。

スタティックライブラリ(lib)をDLLに Part 3

2008-12-20 | Program
前回挙げた,スタティックライブラリ(lib)に対するDUMPBIN出力からモジュール定義(def)ファイルを作る方法ですが,致命的な欠点がありました。defファイル中で,関数についてはEXPORTSステートメントで名前を書くだけでOKなのですが,変数にはDATAキーワードを付加しなくてはいけないのです(参考:EXPORTS)。これを怠ると,リンクは成功するにもかかわらず,実行時,エクスポートされた変数をインポート先から参照したときにアドレスがおかしくなっていて,アクセス違反例外が発生します。

さらに,defファイル中のエクスポート変数にDATAキーワードを付加した場合は,インポート側で__declspec(dllimport)しないといけません(参考:DEFファイルを使ったインポート)。エクスポートしている変数が少なければこれでなんとかなるはずです。手作業で修正できないほどたくさんあったら…うーん,やっぱりC++の構文解析しかないんでしょうか。