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 回答