KERNEL32.dll には IsDebuggerPresent というAPIが用意されている。
IsDebuggerPresent の機能として、今デバッグで実行されているのかどうかを判断する機能だそうで Windows98/WindowsNT4.0 から利用可能。
で、本題。
VisualStudio2005 C++ から、ランタイムライブラリで IsDebuggerPresent 関数にリンクしてしまっているため、関数が実装されていない Windows95 では VisualStudio2005 C++ で作ったバイナリを実行できなくなります。
以上!!…、と放置されたらあまりにも悲しい。
探してみたら解決方法があった。
かなり強引な方法で DLL のインポートを横取りする (未参照を防ぐ)
ここで一通り解説されてるけど、忘れないためにも自分でも書いてみる。
EXTERN_C BOOL WINAPI _imp__IsDebuggerPresent(void)
{
return FALSE;
}
この関数を定義してあげるだけで、VisualStudio2005 C++ で作ったバイナリが Windows95 でも実行できるようになる。
この関数で重要なのは、_imp__です。
_imp__* で関数を定義することで、KERNEL32 側の IsDebuggerPresent 関数ではなく _imp__IsDebuggerPresent 関数が呼ばれるようになるそうです。
詳しくは、かなり強引な方法で DLL のインポートを横取りする (未参照を防ぐ) を見てもらったほうが良いかと思います。
これ使うと…なんだか色々出来そうな気がしてしまう…。
この内容についてさっき新しいことが分かり、上記のコードは間違ってたので、新しく更新しました。よろしくお願いします。
ジェットさん>
わざわざご連絡ありがとうございます。