Visual Studio 2005でWin95対応ソフトをコンパイル

Windows 95 で Visual Studio 2005 でコンパイルしたソフトを起動することができないのは、KERNEL32 の IsDebuggerPresent という関数がインポートされてしまうからです。

この関数は Windows 98から実装されています。


回避する方法は、

プログラム内に

EXTERN_C BOOL WINAPI _imp__IsDebuggerPresent(void)
{
  return FALSE;
}

を埋め込む方法が一つ。 *注 この方法確認したら問題があるみたいなので、 MS11-025 を入れると 98/Me/NT/2000でソフトが動かなくなる件 その2 の方法を利用してください。

VisualStudio2005とIsDebuggerPresentとWindows95 | 上弦乃月
*注 このブログ記事も同様。

もう一つは、こちらに公開されている、imp.asm を インクルードして、imp.objをリンクさせることです。
かなり強引な方法でDLLのインポートを横取りする(未参照を防ぐ)
*注 このブログ記事は大丈夫。

後者の方法だと、

error LNK2005: __imp__IsDebuggerPresent@0 は既に imp.obj で定義されています。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

の様になってしまうので、リンクオプションに /FORCE:MULTIPLE を指定してやる必要があります。

こうして、もふったーを v0.1.5より Windows 95 対応にしてみました。
Twitter Client Mo-Footer(もふったー)開発計画【BM】

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です