1

初心者の間違いを事前にお詫び申し上げます。これが私の最初の質問です。まず、いくつかの背景:

依存関係ウォーカーを使用して、lib またはソース コードがない .dll 内の C++ 関数を検索するプログラムのモジュールを作成しようとしています。元の開発者からサポートを得られないことも想定できます。基本的に、それにアクセスする別のファイルをチェックして、それを機能させるための最小限の機能を確認しました。出力される装飾されていない名前の例を次に示します。

void foo::bar::baz(float)
float foo::bar::qux(void)
foo::bar::bar(void)
class foo::bar & foo::bar::operator=(class foo::bar const &)

上の 2 つの関数は明らかに、float または void を受け取り、float または void を返します。次のようなものを使用して、同様の機能が機能するようになりました。

HINSTANCE THEDLL = LoadLibrary("C:\\dllFolder\\theDll.dll");
typedef float (*quxType)(void);
quxType qux = (quxType)GetProcAddress(THEDLL, "quxMangledName");

したがって、それらは問題ではありません。

リストの 3 番目は、void を受け取る別の関数のように見えますが、明示的な戻り値の型はありません。これは、暗黙の型を使用する必要があることを意味しますか?それは void ですか、それとも実際には関数ではありませんか? そうでない場合、それは何ですか?

4枚目はどうしようか迷っています。関連する .h ファイルなしで処理することさえ可能ですか?

私は周りを見回しましたが、関数が明示的な戻り値の型を持つ通常の関数のように見えない場合に何をすべきかについての情報を見つけることができませんでした. 同様の .dll で機能する関数を取得するために使用したのと基本的に同じコードを使用しているにもかかわらず、ここで関数 #2 を使用しようとするとアクセス違反が発生し続けます (関数 #2 だけが必要です)。したがって、.dll にはより多くの情報が必要であるか、最初に何かを初期化する必要があると推測しています。そのため、リストにある他のものに興味があります。

これは複雑な問題であることを認識しているため、おそらく「正しい答え」の解決策はありませんが、明らかな間違いを犯している場合、または問題に対処する方法について一般的な提案がある場合 (依存関係ウォーカーの代替)、教えてください。

4

1 に答える 1