C++ 如何比较成员指针函数与Microsoft Visual C中涉及的DLL是否相等?

C++ 如何比较成员指针函数与Microsoft Visual C中涉及的DLL是否相等?,c++,function,pointers,dll,member,C++,Function,Pointers,Dll,Member,根据我所读的内容,可以比较两个指向成员函数的指针是否相等。然而,这篇文章似乎只讨论了不涉及DLL的单个可执行文件的情况 是否可以检查两个功能是否与DLL相同?假设我们有 class DLL A { public: virtual bool aaa(); }; 并且在DLL中有一个变量 bool DLL (A::*dllpointer)() = &A::aaa; 我们在可执行文件中也有一个变量 bool (A::*exepointer)() = &A::aaa; 当我试着

根据我所读的内容,可以比较两个指向成员函数的指针是否相等。然而,这篇文章似乎只讨论了不涉及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

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

DLL不是一个单独的可执行文件,它只是一个函数库。我理解它。exe与dll链接,但我要问的是,为什么指针在相等性方面不具有可比性,以及如何克服这一点。虽然dll不是单独的可执行文件,但它将映射到可执行文件地址空间的另一部分。这解释了指针不相等的原因。然而,如何克服这一点是我所不知道的。也许通过使用一些动态类型信息,您可以验证两个指针是否指向具有相同定义的函数。您可以通过
dllimport/dllexport
删除函数的两个副本中的一个来修复它。