2011年4月24日日曜日

メモ:WinMain をスタティックライブラリに含む方法

「Unicode 文字セットを使用する」にした_tWinMain 関数を含んだスタティックライブラリを作成し、リンクしようとすると次のようなエラーが出てリンクに失敗します。
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
いろいろ調べた結果、ある掲示板で答えを見つけたのでメモ。exe を作る方のプロジェクトのプロパティで「リンカー」→「詳細設定」→「エントリポイント」の項目に wWinMainCRTStartup と書くだけ。
理由ははっきりとは不明ですが、もともと Win32 では「マルチ バイト文字セットを使用する」では WinMain() が呼ばれ、「Unicode 文字セットを使用する」では wWinMain() が呼ばれるわけですが、スタティックライブラリに含める場合はこの設定にかかわらず WinMain() が呼ばれてしまうようでエラーになってしまうみたいです。なんでこんな罠が…。
ちなみにこちらは VisualStudio 2010 でのお話です。

0 件のコメント:

コメントを投稿