跳过未使用的虚函数
Skip Unused Virtual Function
我有主要的可执行文件和两个取消引用到 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) { }
}
注意:我创建了插件接口。
您接口的虚函数上的 =0 后缀表示它们是纯虚函数,并且您在从基础 class 继承时需要覆盖它们。在您的第一个示例中,CForward 是一个抽象 class,因为您没有覆盖 A,因此您无法创建 CForward 的实例。
我有主要的可执行文件和两个取消引用到 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) { }
}
注意:我创建了插件接口。
您接口的虚函数上的 =0 后缀表示它们是纯虚函数,并且您在从基础 class 继承时需要覆盖它们。在您的第一个示例中,CForward 是一个抽象 class,因为您没有覆盖 A,因此您无法创建 CForward 的实例。