2

.netで管理されていないdllを動的に呼び出すを読んだ後

私は自分の好みに合わせてコードを変更しようとしています。Idisposable を実装してロード呼び出しをラップし、必要に応じて解放するクラスを作成しました。ただし、匿名デリゲートを使用できる場合、構文を理解できないようです。

var loaded=DynamicLibraryLoader.TryLoad("User32.dll");
var beeper=loaded.GetProcAddress("MessageBeep");
var type=typeof(Action<UInt32>);
Action<UInt32> beepAction2=(Action<UInt32>) Marshal.GetDelegateForFunctionPointer(beeper,type);

最後の行は、指定された Type がジェネリック型定義であってはならないことを示す引数例外をスローします。これを回避する方法はありますか、または管理されていないことを行うために名前付きデリゲートを提供する必要がありますか?

アンマネージ コードを含むウィンドウでデフォルトで実行できることに関心のある方は、リンク (ショートカットの作成、DLL の動的ロード) を参照してください。

4

1 に答える 1

1

例外が示すように、ネイティブ関数ポインターをマネージ コードに変換するときは、非ジェネリック デリゲートを使用する必要があります。

于 2009-08-28T16:57:16.543 に答える