web-dev-qa-db-ja.com

64ビットシステムでのC#PInvoking user32.dll

64ビットアプリから64ビットWindowsでuser32.dllをピンボークするのは間違っていますか?私はこれを何度も成功させ、エラーは発生しませんでしたが、矛盾しているようです。代わりにuser64.dllを探す必要がありますか?

26
James Cadd

user32.dllという名前は誤解を招く恐れがあります。これは、呼び出しているuser32.dllの64ビットバージョンです。 64ビットバージョンは%windir%\System32\user32.dllにあります。

32ビットアプリケーションとの互換性のために、32ビットバージョンが含まれています。 %windir%\SysWOW64\user32.dllにあります。 dumpbinユーティリティを使用してそれらを検査できます。

System32\user32.dll:

FILE HEADER VALUES
        8664 machine (x64)

SysWOW64\user32.dll:

FILE HEADER VALUES
         14C machine (x86)
32
Mehrdad Afshari

今説明したのとまったく同じ理由でuser64.dllはありません。netプログラムはCPUアーキテクチャに依存しない可能性があるため、同じコードがx86とx64で機能する必要があります。
プログラムをx86プラットフォームに移行しても、変更を加えなくても実行できます。
user32.dllという名前を付けたとき、それらのシナリオを念頭に置いていなかったと思います。

1
Shay Erlichmen