2

从我在这里读到的内容,可以比较两个指向成员函数的指针是否相等。然而,这篇文章似乎只涵盖了没有涉及 DLL 的单个可执行文件的情况。

是否可以检查两个函数是否与 DLL 相等?假设我们有

class DLL A
{
public:
  virtual bool aaa();
};

并在 DLL 中有一个变量

bool DLL (A::*dllpointer)() = &A::aaa;

我们在可执行文件中也有一个变量

bool (A::*exepointer)() = &A::aaa;

当我尝试这样比较两者时

if (dllpointer == exepointer)

就好像两者不相等一样。可能这是预期的行为,但我想知道是否有可能克服这个限制,以便比较返回 true

4

1 回答 1

1

比较指针(无论它们是指向成员函数、成员变量还是其他任何东西)只会告诉您指针是否指向同一事物 - 而不是它们是否指向“具有相同属性的同一事物的不同实例” . 由于“EXE”的成员函数class A不可能是与“DLL”相同的函数class A,因为它们是同名类的不同实现,所以你不能指望指针是相同的。不,没有真正的方法可以解决这个问题。您可以比较函数的“内容”,看看代码是否相同,但这需要知道函数的长度,这不是一件容易的事。

于 2013-04-29T13:51:49.913 回答