C++ 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的编写,本例调用是写入用户名和密码。测试成功。


版权声明:本文为qq_34248512原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。