アプリを64bit仕様でビルドすると起動できません

[戻る]
ともや 2009/09/08(火) 13:50:06
お世話になっております。

最近、自作のアプリの64bit化の作業を行っているのですが、
問題にぶつかってしまいました。
使用している開発環境はVisual Studio 2005 SP1です。
OSはWinVista(64bit)です。

基本的には「my_app.exe」「my_app.dll」の2つのファイルがあります。
プラットフォームとして「x64」を選択してコンパイルしました。
キャストに関するエラーがいろいろ出てきたので、INT_PTR, DWORD_PTR
などに置き換えたり、SetWindowLong -> SetWindowLongPtrなどに
書き換えたりしました。

そうして、なんとかビルドが成功して「my_app.exe」「my_app.dll」
の2つのファイルが完成しました。

ところが、デバッグしてみると以下のようなエラーメッセージが表示
されて起動できません。

「アプリケーションを正しく初期化できませんでした。(0xc000007b)」

デバッガの出力ウィンドウには、以下のように表示されます。

-----------
'my_app.exe': 'C:\Windows\System32\msctf.dll' を読み込みました。
シンボルが読み込まれていません。
デバッガ:: ハンドルされていない続行不可の例外がプロセスの読み込み中に
スローされました
プログラム '[5992] my_app.exe: ネイティブ' はコード 
-1073741701 (0xc000007b) で終了しました。
-----------

EXEの中にあるメインアプリケーションクラスのコンストラクタや
InitInstance()にプレークポイントをかけても、そこにたどり着く前に
エラーになっています。DLLのDllMain()にブレークポイントを
かけても同様です。到着前にエラーです。

また、テスト用に作成した64bitアプリ(AppWizardで作った簡単なアプリです)
が正常に起動することを確認してから、
「my_app.dll」をスタティックリンクして起動すると、やはり
同じエラーが起きて起動できないので、「my_app.dll」が原因である
ことは間違いないようです。

ただ、DllMain()にすら制御がこないので、デバッグのしようがありません。
どのようなことが考えられるでしょうか?

長々と申し訳ありません。

ともや 2009/09/08(火) 15:04:09
[[解決]]
申し訳ありません。自己解決しました。
結論からいいますと、マニフェストファイルが原因でした。

http://www.g-ishihara.com/mfc_ge_04.htm
のページで紹介されていた、下記のコードを追加したところ正常に起動できるように
なりました。
つまり「processorArchitecture」の設定が「X86」のままだったのが原因のようです。

--------
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' 
language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' 
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
--------

お騒がせして申し訳ありませんでした。

古いスレッドには追加発言できません。