CSTLを使ってDLLを小さくするっていう話

小さいDLLを作るには下記サイトが参考になる。
http://www.geocities.co.jp/egggarden/win32api/miniexe.htm
ひとつのポイントとして
#pragma comment(linker, "/entry:\"DllMain\"")
を定義しておけばいいと言うのがあるんだが、これをやるといろいろな制限がつく。
この中でも私がはまった(なかなか気づかなかった)のが
 ・strcpyとかsprintfとかが使えない
 ・浮動小数点が使えない
 ・STLが使えない
だった。上記に違反すると、VCでリリースモードでビルドしようとしても、LNK2019エラーとやらで”error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。LIBCMT.lib”ってでてリンクできない。

strcpyとかはlstrcpyとかそういうWin32APIによる代替手段を使う。以下のサイトが参考になる。
http://www.arcpit.co.jp/winapi/api_01/ap010407.htm
浮動小数点に関しては、
EXTERN_C int _fltused = 0x9875;
をどっかに定義しとく。これが何かは全く謎だが、それで動くんだから仕方がない。
で、ここまではいいとしてもSTLはどうしようもない。もう自分で作るしかないのか!?と思われたときにCSTLを見つけたっていう。要するにSTLの代わりにCSTLを使っておけばLNK2019エラーを回避できるという話。
すごく便利です。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C言語, プログラム パーマリンク

コメントを残す

メールアドレスが公開されることはありません。