写这个主要是为了让自己写的程序支持插件 主题思路就是在dll中去继承一个基类,然后实现自己想要的一些功能,这个过程中就会涉及到读取dll中的类的方法。 首先我们需要在主程序中声明一个基类:
#pragma once
class Graph
{
public:
Graph() {};
~Graph() {};
virtual void move() = 0;
virtual void save() = 0;
virtual void isIn() = 0;
virtual void SayHello() = 0;
};
我们写的插件就需要继承Graph这个基类,实现这些方法。 于是我们在Test.h中写下
#include "Graph.h"
class Test :public Graph
{
public:
virtual ~Test();
void move() {};
void save() {};
void isIn() {};
void SayHello();
};
//Test.cpp:
void Test::SayHello()
{
cout << "hello" << endl;
}
这样一来就可以实现插件的功能了。 然而最难的还是如何将这个类加载进我们的主程序中。 首先我们还需要在Test.cpp中加一个函数CreatTest():
//Test.h
Graph *CreateTest();
//Test.cpp
Graph *CreateTest() {
Test *test = new Test;
cout << "sucess" << endl;
return test;
}
这样一来我们就可以通过调用CreateTest()来获得一个子类。
之后在主程序中我们还需要使用一点windowsAPI调用dll中的CreateTest()
HINSTANCE hDllInst;
hDllInst = LoadLibrary(L"Test.dll");
Graph* (*lpTestShow)() = (Graph*(*)())GetProcAddress(hDllInst, "CreateTest");
if (NULL != lpTestShow)
{
Graph *temp = (*lpTestShow)();
temp->SayHello();
}
FreeLibrary(hDllInst);
这里就是获取了CreatTest()的函数指针,之后直接调用获取的。
其实整个过程也并不复杂。。。。。。。。。
正在搬小板凳…