2011-12-20 17 views
0

私はlibmysql.dllをロードしていて、dbに接続します。 mysql_real_connectを呼び出すと、バッファオーバーフローエラーが発生します。どうして?コード:ロードされたlibmysql.dllを介してmySQL DBに接続

#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; 
} 
+0

'sqbinit'は' MYSQL * 'とされていますが、 'int'として持っています。これがあなたの問題であるかどうかは確信していませんが、間違いなく私に疑問を呈していました。 – chrisaycock

+0

THX、MYSQLに変更* sqlinit;およびtypedef MYSQL *(* BinaryFunction_i)(int); – haemse

+0

でも、まだオーバーフローが発生しています。 ??? – haemse

答えて

0

OK、問題は、32プログラムの開発では動作しませんSYSWOW64フォルダにlibmysql.dllをと、このDLLの64ビット版の64ビットwin7の検索ということでした!

関連する問題