0

次のように定義された関数があるとします。

class Foo() {
  public:
      void bar(MyClass* p, int i, int j, CArray<CArray<int,int>,int> &a);
}

void Foo::bar(MyClass* p, int i, int j, CArray<CArray<int,int>,int> &a){
 // Function body
}

Win32 アプリケーション/DLL の場合、この関数は「エクスポート」されていません。エクスポートされた関数の関数アドレスをbar取得する方法は簡単でした。ただし、エクスポートされていない関数の関数アドレスを取得するのは少し難しいです。

4

2 に答える 2

1

一般的なケースでは、これを行うことはできません。

他の問題の中でも、関数がエクスポートされていない場合、存在しない可能性があります。オプティマイザーは、関数が呼び出されるすべての場所で関数をインライン化する場合があります。これが発生した場合、関数はモジュールに存在しないため、アドレスがありません。

于 2012-06-25T18:18:07.433 に答える
0

関数が .dll にある場合は、おそらく .def ファイルを使用してエクスポートできます。dllexport が定義されているかのように、コンパイルされたコードから事後にエクスポート テーブルを作成します。

ここでそれについて読んでください:http://msdn.microsoft.com/en-us/library/d91k01sh(v=vs.80).aspx

于 2012-06-25T18:28:12.220 に答える