c++ - 跳过未使用的虚函数

标签 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(void)?

如果我这样创建 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) { }
}

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

最佳答案

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

https://stackoverflow.com/a/2652223

关于c++ - 跳过未使用的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28923271/

相关文章:

c++ - 使用固定内核进行多次迭代的膨胀/腐 eclipse 是否类似于具有更大尺寸的等效内核的膨胀/腐 eclipse

c++ - 类 - 用户定义的具有动态大小的智能阵列

子 vector 和成员的 C++ 编译时解释

C++ 问题

java - 在哪里放置@Transactional?在接口(interface)规范或实现中?

java - 具有接口(interface)的多重继承歧义

java - 如何使用IAdaptable类创建工作集? [Eclipse 插件]

ios - ionic 3 - 无法使用最新的 xcode 为 ios 安装 onesignal 插件

c# - 在 CRM2011 插件中创建 OrganizationServiceProxy 以使用早期绑定(bind)

java - 具有可变数量参数的接口(interface)的方法