7

ここでのDllImportの使用法の違いは何ですか?具体的には、「user32」は単に「user32.dll」を意味するのでしょうか、それとも「user32.lib」などを意味するのでしょうか。

[DllImport("user32")]
protected static extern int GetKeyboardState(byte[] pbKeyState);

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
protected static extern short GetKeyState(int vKey);

おそらく、CharSetとCallingConventionは無視してかまいません。

それらが同じである場合、私はこれをより一貫性のあるものに書き直すことができますが、そうでない場合、私はそれにたくさんの問題を抱えたくありません。

4

2 に答える 2

13

この例では、違いはありません。.dll拡張子は、を作成するために自動的に追加さ"user32"れます"user32.dll"。ただし、これが常に当てはまるとは限りません。ライブラリファイル名にピリオドが含まれている場合、.dll拡張子は自動的に追加されません。

いくつかの例:

[DllImport("user32")]->「User32.dll」を解決します。正しい。

[DllImport("user32.dll")]->「User32.dll」を解決します。正しい。

[DllImport("mylib.version5")]->「mylib.version5」を解決します。正しくない

[DllImport("mylib.version5.dll")]->「mylib.version5.dll」を解決します。正しい。

于 2012-03-06T03:20:34.667 に答える
1

Windowsでは違いはありません。拡張子を省略すると、インポートは正常に実行されます。<dllmap>通常、P /Invokeランタイムがエイリアスを検索する構成セクションでMonoを実行する場合は、拡張子を省略します。

于 2012-03-05T22:38:45.650 に答える