小さい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エラーを回避できるという話。
すごく便利です。
以上