代码如下, 导出一个纯虚类, 父类实现如下:
//CDll1.h
#pragma once
#ifdef CDLL1_EXPORTS
#define DLL1_API __declspec(dllexport)
#else
#define DLL1_API __declspec(dllimport)
#endif
class DLL1_API CDll1
{
public:
static CDll1* CreateInstance();
static void DestroyInstance(CDll1* pInstance);
virtual void Destroy() = 0;
virtual void DllTest() = 0;
};
//CDll1.cpp
#include "CDll1.h"
#include
#include
#include "Dll1.h" //派生类
CDll1* CDll1::CreateInstance()
{
OutputDebugString(_T("\n CDll1::CreateInstance \n"));
return new Dll1;
}
void CDll1::DestroyInstance(CDll1* pInstance)
{
OutputDebugString(_T("\n CDll1::DestroyInstance \n"));
if (pInstance != NULL)
{
pInstance->Destroy(); //这里调用通过动态绑定的虚函数
}
}
派生类实现如下:
//Dll1.h
#pragma once
#include "CDll1.h"
class Dll1 : public CDll1
{
public:
Dll1();
virtual ~Dll1();
virtual void Destroy();
virtual void DllTest();
};
//Dll1.cpp
#include "Dll1.h"
#include
#include
Dll1::Dll1()
{
OutputDebugString(_T("\n Dll1::Dll1 \n"));
}
Dll1::~Dll1()
{
OutputDebugString(_T("\n Dll1::~Dll1 \n"));
}
void Dll1::Destroy()
{
OutputDebugString(_T("\n Dll1::Destroy \n"));
if (this != NULL)
{
delete this;
}
}
void Dll1::DllTest()
{
OutputDebugString(_T("\n Dll1::Dll1Test \n"));
}
按照之前的理解, 静态成员函数中不能引用非静态的成员, 当这里竟然可以正常通过编译, 调用结果如下:
还想请各位同志指教一二.
你好像不太理解静态成员的概念,或者不太理解对象。
你这里的代码是静态成员函数的形参是个对象,通过对象,调用了对象的public 函数,这完全没问题。
只要是你构造出来的对象,就可以通过对象调用public 成员。
你上面的全局函数,也完全没有问题。
他是通过传入的对象指针调用的又不是直接调用,当然可以