0
我正在加載一個libmysql.dll並希望連接到一個數據庫。當調用mysql_real_connect時,我得到一個緩衝區溢出錯誤。爲什麼?代碼:連接到MySQL數據庫加載libmysql.dll
#include <iostream>
#include <string.h>
#include <windows.h>
#include <cstdlib>
#include <stdio.h>
#include "mysql.h"
using namespace std;
// Definition des Types der DLL-Funktion, die verwendet werden soll
typedef int (*BinaryFunction_c) (int,string,string,string,string,int,int,int) ;
typedef int (*BinaryFunction_i) (int) ;
int main (void)
{
BinaryFunction_i m_init ;
BinaryFunction_c m_connect ;
BOOL fFreeResult ;
int sqlinit;
int connid;
// DLL Datei laden
HINSTANCE hinstLib = LoadLibrary("./libmysql.dll");
if (hinstLib != NULL)
{
// Die Einsprungadresse abfragen
m_init = (BinaryFunction_i) GetProcAddress (hinstLib, "mysql_init") ;
// Die Funktion aufrufen
if (m_init != NULL)
{
sqlinit = (*m_init) (NULL);
cout << dec << "m_init: " << m_init << endl;
}
else
{
cout << "fehler beim init" << endl;
}
//connect
m_connect = (BinaryFunction_c) GetProcAddress (hinstLib, "mysql_real_connect");
// Die Funktion aufrufen
if (m_connect != NULL)
{
connid= (*m_connect) (sqlinit, "192.168.1.2", "cashbot", "eck1234", "cashbot", 3306, NULL, 0);
cout << "connid: " << connid << endl;
}
else
{
cout << "fehler beim connect" << endl;
}
// Die DLL-Datei wieder entladen
fFreeResult = FreeLibrary (hinstLib) ;
}
return 0;
}
'sqlinit'應該是'MYSQL *',但是你把它當作'int'。不知道這是否是你的問題,但它對我來說絕對是一個值得質疑的問題。 – chrisaycock 2011-12-20 16:57:17
THX,換成MYSQL * sqlinit;和typedef MYSQL *(* BinaryFunction_i)(int); – haemse 2011-12-20 17:49:01
但仍然溢出! ??? – haemse 2011-12-20 17:49:21