在 Windows 项目中,我们定义了一个接口类
class Interface {
public:
virtual ~Interface() { }
virtual void func() = 0;
};
和工厂功能
__declspec(dllexport) Interface *construct();
在一个DLL中。当然Interface
,DLL 内部有一个具体的专门化,但我们不导出它。不过,我们可以在 DLL 之外使用它。这是如何运作的?由 构造的vftable
实例construct()
由函数指针组成,这些指针指向 DLL 未导出的函数。这种方法是可以接受的还是或多或少是一种黑客行为?