我有一个带有纯虚函数的导出类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。 然后我调用一个工厂函数,返回派生类指针,然后调用实现的函数。工厂函数返回指向派生类对象的指针,但在运行时调用虚函数失败。 这没有帮助 - > Not necessary to export class with only virtual/inline functions?
为什么不同时导出类? –
它如何失败?它会崩溃,返回错误的值,等等...... –
@brianbeuning我也试过了。这是行不通的。 –