32 ビットと 64 ビットの実行可能ファイルがあります。どちらも同じビットの DLL をロードします。これは、64 ビット実行可能ファイルが 64 ビット dll をロードする場合と同様です。いずれにせよ、32 ビット DLL は完全に機能し、スレッドを作成し、Hello World メッセージボックスをポップします。ただし、64 ビット DLL では、そのコードは実行されません。createthread が失敗するようなものです。
case DLL_PROCESS_ATTACH:
myFunc();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
void myFunc()
{
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&MyThread, NULL, 0, NULL);
}
DWORD WINAPI MyThread(LPVOID param)
{
MessageBoxA(0, "HELLO 64", 0,0);
ExitThread(0);
}
これらは、DLL からのいくつかのスニペットです。私はグーグルで調べましたが、思いつくことができるのは、スタックの配置が失敗しているということだけですか? それが理由である場合、CreateThread を適切に呼び出して機能させるにはどうすればよいですか? それが理由ではない場合、誰かが何が間違っているのか知っていますか?
事前に感謝します。