我有一个带有纯虚函数的导出类 Base 的 MyApi.dll。我还有一个派生类,在同一个 dll 中实现了虚函数。工厂函数返回一个派生类对象。
#define MYAPI_EXPORT __declspec(dllexport)
class MYAPI_EXPORT base{ virtual int func() = 0;}
class MYAPI_EXPORT derived: public base
{
int func(){
return 4;
}
}
MYAPI_EXPORT void *factoryfunction()
{
void *obj = new derived;
return obj;
}
下面是调用这个派生函数的代码。
CString dllName = _T("MyApi.dll");
typedef void* (*fn)();
HINSTANCE hModule = ::AfxLoadLibrary(dllName);
if(hModule)
{
fn pfn = (fn)GetProcAddress(hModule,"factoryFunction");
Base* pcDerived = (Base*)pfn;
pcDerived->func();
}
我使用 LoadLibrary 加载了 MyApi.dll。然后我调用一个工厂函数返回派生类指针,然后调用实现的函数。工厂函数返回指向派生类对象的指针,但对虚函数的调用在运行时失败。这没有帮助-> 没有必要只使用虚拟/内联函数导出类?