跳过未使用的虚函数

时间:2015-03-08 05:01:49

标签: c++ plugins interface null dereference

我有主要的可执行文件和两个被解除引用到DLL的函数。

class CPluginInterface
{
public:
    virtual void A(void) = 0;
    virtual void B(void) = 0;
};

我像这样创建了DLL

//Main.h
#include "Function.h"

class CForward : public CPluginInterface
{
public:
    //void A(void);
    void B(void);
};

//Main.cpp
#include "Main.h"

/*void CForward::A(void)
{
    //A Function is commented because it is not used
}*/

void CForward::B(void)
{
    //Do something here
}

extern "C"
{
    // Plugin factory function
    //void __declspec(dllexport) __cdecl A(void) { }
    void __declspec(dllexport) __cdecl B(void) { }
}

但程序崩溃是因为当主可执行文件解除引用时,A(void)不存在。如何跳过A(无效)?

如果我像这样创建DLL,它可以正常工作。

//Main.h
#include "Function.h"

class CForward : public CPluginInterface
{
public:
    void A(void);
    void B(void);
};

//Main.cpp
#include "Main.h"

void CForward::A(void)
{
    //Do something here
}

void CForward::B(void)
{
    //Do something here
}

extern "C"
{
    // Plugin factory function
    void __declspec(dllexport) __cdecl A(void) { }
    void __declspec(dllexport) __cdecl B(void) { }
}

注意:我创建了插件接口。

1 个答案:

答案 0 :(得分:0)

接口虚函数的后缀= 0表示它们是纯虚拟的,并且在从基类继承时需要覆盖它们。在您的第一个示例中,CForward是一个抽象类,因为您没有重写A,因此您无法创建CForward的实例。

https://stackoverflow.com/a/2652223