#include <mysql.h> __declspec(dllexport) MYSQL* init_conn(char* host, char* user, char* passwd, char* db_name, unsigned int port, char* unix_socket, unsigned long client_flag) { MYSQL* conn = mysql_init(NULL); if (conn == NULL) { return NULL; } if (mysql_real_connect(conn, host, user, passwd, db_name, port, unix_socket, client_flag) == NULL) { mysql_close(conn); return NULL; } return conn; } __declspec(dllexport) void close_conn(MYSQL* conn) { mysql_close(conn); }
在上面的代码中,大家用 __declspec(dllexport) 来定义这个 DLL 中的函数,这样在将这些函数编译成 DLL 后,其他程序就可以使用它们。在 init_conn 函数中,大家使用了 mysql_init 函数来初始化连接,然后使用 mysql_real_connect 函数来连接数据库。如果连接失败了,大家就返回 NULL。在 close_conn 函数中,大家使用 mysql_close 函数来关闭连接。
在使用这个 DLL 的时候,大家可以先加载它:
#include <windows.h> HINSTANCE hDll = LoadLibrary(TEXT("MySqlConn.dll")); if (hDll == NULL) { // 加载 DLL 失败 }
然后就可以使用它里面的函数了:
typedef MYSQL* (*InitConnFunc)(char*, char*, char*, char*, unsigned int, char*, unsigned long); typedef void (*CloseConnFunc)(MYSQL*); InitConnFunc init_conn; CloseConnFunc close_conn; init_conn = (InitConnFunc)GetProcAddress(hDll, TEXT("init_conn")); close_conn = (CloseConnFunc)GetProcAddress(hDll, TEXT("close_conn")); MYSQL* conn = init_conn("localhost", "root", "123456", "test", 3306, NULL, 0); if (conn == NULL) { // 连接失败 } // ... close_conn(conn);
在这段代码中,大家使用了 LoadLibrary 函数来加载 DLL,通过 GetProcAddress 函数来获取 DLL 中的函数地址,然后就可以使用这些函数了。在这个例子中,大家使用了 init_conn 函数来连接数据库,并且在连接失败时返回 NULL,使用了 close_conn 函数来关闭连接。