3

実行時に、String名前、並べ替えられたオブジェクトの配列、およびネイティブ関数に関するいくつかの追加情報 (dllpath、calltype など) が提供されます。

CallInformationすべての情報がオブジェクトにあると仮定しましょう。

このネイティブ関数を呼び出すにはどうすればよいですか?

注: - 実行前に dll が提供されていません。- 実行前に呼び出し情報が提供されません。- 実行前に呼び出しパラメーターの量や種類がわかりません。- 実行前に returntype がわかりません。

ネイティブ関数の呼び出しに関するWeb 上の通常の情報は、呼び出しに関するものです。

  • 既知の DLL 内の既知の関数タイプ
  • 不明な DLL 内の既知の関数タイプ

私が必要なのは

  • 不明な DLL 内の不明な関数タイプ
4

2 に答える 2

2

解決策には、Reflection.Emitが含まれます。CallInformationに基づいて、適切なDllImport属性で装飾されたPInvokeシグネチャを含むクラスを動的に生成する必要があります。コードがないことを残念に思いますが、冗長なReflection.Emit APIを考慮すると、投稿する価値のあるものに要約することはできません。

于 2012-08-07T17:20:00.653 に答える
1

デリゲート シグネチャを動的に作成し、リフレクションを使用して呼び出します。
デリゲートを動的に作成する方法、ネイティブ関数をロードする方法、リフレクションを使用して関数を呼び出してそれらを接続する方法を調べてください。

于 2012-08-07T17:17:22.393 に答える