我有一個帶有純虛函數的導出類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我也試過了。這是行不通的。 –