C++ DLL导出类的一种方法(纯虚函数)

学习mysql时突然想玩玩dll就随便写了下。具体代码如下

纯虚函数定义如下(mysqldll.h)

#pragma once
#ifdef MMYSQL_EXPORTS
#define MMYSQL_API __declspec(dllimport)
#else
#define MMYSQL_API __declspec(dllexport)
#endif

#include "stdafx.h"
#include <string>
#include <mysql.h>
#pragma comment(lib, "ws2_32.lib")  
#pragma comment(lib, "libmysql.lib")

class mmysql
{
public:
    virtual bool initConnection() = 0;
    virtual bool addData(char* username, char* password) = 0;
    virtual bool deleteData(char* username) = 0;
    virtual bool isExistUser(char* username) = 0;
    virtual bool isMatch(char* userName, char* passWord) = 0;
    virtual void Release() = 0;
};
extern "C" MMYSQL_API mmysql* _stdcall CreateMySqlObj();
extern "C" MMYSQL_API void _stdcall DestroyMySqlObj(mmysql* pMmysql);

导出类定义如下(mysqlclass.h)

#pragma once
#include "MySqlDll.h"

class MMYSQL_API mysqlDLL : public mmysql
{
public:
    mysqlDLL();
    mysqlDLL(std::string hosts, std::string user, std::string pswd, std::string table, int port);
    ~mysqlDLL();
public:
    virtual bool initConnection();
    virtual bool addData(char* username, char* password);
    virtual bool deleteData(char* username);
    virtual bool isExistUser(char* username);
    virtual bool isMatch(char* userName, char* passWord);
    virtual void Release() {}
private:
    int _port;
    std::string _user;
    std::string _pswd;
    std::string _hosts;
    std::string _table;
    MYSQL _mySQL;
    bool _isConnection;
};

.def文件如下

LIBRARY "ConsoleApplication4"(dll名称,自行更换)
EXPORTS
CreateExportObj @ 1
DestroyExportObj @ 2

这里提供 CreateMySqlObj()和DestroyMySqlObj(mmysql* pMmysql)的定义:

MMYSQL_API mmysql* APIENTRY CreateMySqlObj()
{
    return new mysqlDLL;
}

MMYSQL_API void APIENTRY DestroyMySqlObj(mmysql* pMmysql)
{
    pMmysql->Release();
}

调用示例如下:

#include "stdafx.h"
#include "MySqlDll.h"
#pragma comment(lib, "../debug/ConsoleApplication4.lib")


int main()
{
    mmysql* m = CreateMySqlObj();
    m->initConnection();
    m->addData("张三", "38459");

    return 0;
}

这里是学习mysql,随便学习一下dll的编写,本例调用是写入用户名和密码。测试成功。

猜你喜欢

转载自blog.csdn.net/qq_34248512/article/details/78319883