1.创建动态库定义导出符号
定义在IExport.h头文件,需要导出接口/类时引用该头文件
#ifndef IEXPORT_H
#define IEXPORT_H
#include "pch.h"
//#if defined(EXPORTELEMENT_EXPORT)
#define IEXPORTELEMENT_API __declspec(dllexport)
#else
#define IEXPORTELEMENT_API __declspec(dllimport)
//#endif
#endif //IEXPORT_H
2.定义导出接口
定义在IExportElement.h头文件,其中 “SpecifiedDatabase” 是用户需赋值的数据库类型
#pragma once
#ifndef IEXPORTELEMENT_H
#define IEXPORTELEMENT_H
#include "pch.h"
#include "IExport.h"
#include "SpecifiedDatabase.h"
#define TEST_BEGIN namespace Test{
#define TEST_END };
TEST_BEGIN
extern "C" //以"C"的方式导出接口
{
/*
@param GetCurDb 当前数据库函数指针的声明。需要外部调用者实现获取当前数据库的函数,并赋值给GetCurDb
*/
typedef SpecifiedDatabase* (*GetDatabaseCallBack)();
extern IEXPORTELEMENT_API GetDatabaseCallBack GetCurDb;
}
TEST_END
#endif //IEXPORTELEMENT_H
在IExportElement.cpp中定义导出变量
#pragma once
#include "pch.h"
#include "IExportElement.h"
Test::GetDatabaseCallBack GetCurDb = nullptr;
外部调用
外部调用者设置数据库代码示例:
//需外部调用者定义的数据库全局变量
SpecifiedDatabase* g_pCurDb = nullptr;
// 外部调用者实现回调函数GetCurDb()
SpecifiedDatabase* GetCurDatabase()
{
return g_pCurDb;
}
void InitDatabse(SpecifiedDatabase* pDb)
{
g_pCurDb = pDb;
// 外部调用者把由其实现的回调函数的函数指针赋值给当前数据库
Test::GetCurDb = GetCurDatabase;
}
// 之后外部调用者可使用GetCurDb()获取当前数据库指针