3

タイトルが示すように、User32.dllなどのDLLをインポートし、そのDLLのメソッドを呼び出すメソッドを宣言する場合、なぜメソッドを静的および外部として宣言する必要があるのでしょうか。

IE、これは別のStackOverflowの回答から取得したものですが、私が求めていることを示しています。

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
4

2 に答える 2

3

static-クラスのインスタンスを必要としないため、これらのメソッドはシステムAPIを呼び出し、初期化を必要とせず、静的/非静的ブロックで使用できます

extern-extern修飾子は、外部で実装されるメソッドを宣言するために使用されます。APIメソッドはクラスファイル自体で宣言されていないため、externは、メソッドがelse-whereで宣言されていることをコンパイラに通知します。

于 2013-03-25T15:05:43.227 に答える
1

これに技術的な詳細があるかどうかはわかりませんが、理由は次のとおりです。

外部DLLに存在する静的
メソッドは、どのオブジェクトインスタンスにもバインドできません。それらがオブジェクトインスタンスにバインドされている場合、DLLは毎回どのインスタンスがメソッドを呼び出しているかを追跡する必要があります。

extern
これは、メソッドがC#で実装されることを期待するのではなく、DLLをバインドするためのコードを挿入するようにコンパイラーに指示する単なるキーワードだと思います。

于 2013-03-25T15:06:18.823 に答える