私はC#からWin32を呼び出す必要があります。私は十数回それをやったことがありますが、私は通常、正確な仕掛けを忘れてしまったので、ウェブや古いコードを覗いて、必要なDllImportステートメントが何であるか把握します。C#からWin32を呼び出すより無痛な方法はありますか?
私は一人ですか?
Win32 API全体に必要な宣言を持つ、認可された「Win32」クラスはありますか?すべきであるように思える。たぶん私は何かが欠けているでしょう。
私はC#からWin32を呼び出す必要があります。私は十数回それをやったことがありますが、私は通常、正確な仕掛けを忘れてしまったので、ウェブや古いコードを覗いて、必要なDllImportステートメントが何であるか把握します。C#からWin32を呼び出すより無痛な方法はありますか?
私は一人ですか?
Win32 API全体に必要な宣言を持つ、認可された「Win32」クラスはありますか?すべきであるように思える。たぶん私は何かが欠けているでしょう。
http://www.pinvoke.netが役に立ちます。
一般的なWin32関数では、P/Invoke Interop Assistantを試すこともできます。
PInvoke Interop Assistantを使用して、Cコードを適切なシグネチャと関数に直接変換することもできます。 – JaredPar
認可されたWin32クラスはありませんが、http://www.pinvoke.netはこれらの重要な中心リソースです。
これは、オープンソースプロジェクトの素晴らしいアイデアのようです。
は/ EMは、キャップを思考の上に置いて、の実行は
チェックアウトpinvoke.netする:http://code.msdn.microsoft.com/WindowsAPICodePack
あなたはReflectorを使用してWin32Nativeを検索することができます。それはPInvokingのために使用できる定義の束を持っています。
正しいDllImportステートメントへのアクセスは誰もが言っているように簡単ですが、使い易くするために私は通常C#クラスで必要なWin32関数をラップし、コアヘルパーアセンブリにコンパイルします。次回はアセンブリを参照するだけです。だから私はいくつかのWin32関数が必要な場合は、チャンスはすでに私のヘルパーライブラリには私はそれを追加するだけではないです。
また、リターンコードを例外にマッピングするのではなく、HResultがゼロでない場合、例外がスローされるため、C#アプリケーションはHResultまたはリターンコードについて知る必要はありません。
あなたは一人ではありません。 +1 – spender
もちろん、一人ではありません。 +1 –
pinvoke.netは素晴らしいですが、参照するアセンブリがとても素敵です。 –