2016-03-27 11 views
0

Projem, mevcut proccess'e enjekte edilecek DLL'dir. Benim kod şöyle görünür:MySQL Bağlayıcısı C++ sorguyu yürütürken çöküyor

void Authenticator::initialize(string server, string username, string password, string database, string tablePrefix, int securityLevel){ 
    sqlServer = server; 
    sqlUsername = username; 
    sqlPassword = password; 
    sqlDatabase = database; 
    try { 
     sql::Driver *driver; 
     sql::Connection *con; 
     sql::Statement *stmt; 
     sql::ResultSet *res; 
     sql::PreparedStatement *pstmt; 

     driver = get_driver_instance(); 
     con = driver->connect(server, username, password); 
     con->setSchema(database); 
    } 
} 

bool Authenticator::authenticate(string username, string password, int &errorCode){ 
    try{ 
     sql::Driver *driver; 
     sql::Connection *con; 
     sql::Statement *stmt; 
     sql::ResultSet *res; 
     sql::PreparedStatement *pstmt; 
     driver = get_driver_instance(); 

     stmt = con->createStatement(); 
     res = stmt->executeQuery("SELECT username, password FROM mybb_users WHERE username = '" + username + "' AS _mybbpassword"); 
     return true; //password is correct 
    } 
    catch(sql::SQLException &e){ 
     errorCode = 0; //unable to connect to mysql server 
     return false; 
    } 
} 

Ben başlatmak :: Authenticor'ı koşuyorum, proccess birkaç saniye donar ama sonra tamam. Ancak, Authenticator :: authenticate çalıştırırken, DLL bazı özel durum hatasıyla kilitlenir.

(bunu debug olamaz, tek yol enjekte Nelerin içine corret programında olduğu) Ve evet, var DLL başlatılmamış kullanıyorsunuz

+0

Sorunuzu düzenleyin ve her zaman gösterildiği gibi derlemeyi başaramayan izole kod parçaları yerine [mcve] ekleyin. –

+0

@SamVarshavchik gösterecek çok şey yok, sadece MySQL Connector C++ ile belgeleme yoluyla DLL proje. –

cevap

0

Çok parçacıklı Library (/ MD) setted Ayrıca

con = driver->connect(server, username, password); 

, bazı başka sorunlar var: Bu hat önce böyle bir şey eksik

stmt = con->createStatement(); 

: Authenticator'ın :: authenticate içinde con:

  • Kitaplığınızda yalnızca bir kez get_driver_instance() öğesini çağırmalısınız.
  • Sürücü-> connect(), con-> createStatement(), stmt-> executeQuery() tarafından ayrılan belleği bırakmıyorsunuz. Programınız sadece zamanla büyüyecek.
İlgili konular