C++加载dll中的类

写这个主要是为了让自己写的程序支持插件
主题思路就是在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()的函数指针,之后直接调用获取的。

其实整个过程也并不复杂。。。。。。。。。

4 thoughts on “C++加载dll中的类

      1. wordpress用的是Gravatar的头像,如果电子邮件在那网站上没有对应的头像,头像就会像这种是随机的

  1. I see you don’t monetize your site, don’t waste your traffic, you can earn extra bucks every month because you’ve got hi quality content.

    If you want to know how to make extra money, search for: Boorfe’s tips
    best adsense alternative

wxh进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注