は、USER32.DLL関数を呼び出すときにリンクするDLLの署名/名前を変更する必要があります。
命名規則にもかかわらず、64ビットWindowsマシンでは、[Windows] \ System32にあるUSER32.DLLファイルは実際には64ビットのDLLです。 実 32ビットバージョンのUSER32.DLLは、実際には[Windows] \ SysWow64というフォルダにあります。
詳細については、this questionを参照してください。
おそらく最も注意する必要があることの1つは、さまざまなWindows API関数のパラメータとして渡すデータ型です。たとえば、USER32.DLL内の "SendMessage"関数には、少なくとも1つのパラメータ(page on P/Invokeに従う)を持つ特定の要件があります。
それが署名だがある。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
と明確状態下2 & 3注:
2) のlParamとして "INT" または "整数" を使用しないでください。あなたのコードは、64ビットの ウィンドウでクラッシュします。 IntPtr、 "ref" 構造体、または "out"構造体のみを使用してください。
3)戻り値として "bool"、 "int"、または "integer"を使用しないでください。 コアが64ビットウィンドウでクラッシュします。 IntPtrのみを使用してください。 bool - pInvokeは IntPtrをブール値にマーシャリングできません。
この「注意点は、」それは私がに任意の Windows API関数を呼び出すときに特に注意を払って何かだが、この特定の機能(のSendMessage)に特異的であると思われます。
64/32ビットアプリケーション間でファイルシステムがどのように変化しているかをページが示す方法は、わかりやすいです。あなたのお返事ありがとうございました。 –
ようこそ。私は助けてうれしいです。 –