So here's my problem. I'm writing web browser plugin in Firebreath. Plugin has to connect to different databases (Firebird, MS SQL, My SQL etc.) depending on client request. So I'm creating class to manage connection to right DB. To connect to Firebird I'm trying to use IBPP. I managed to connect to FB using IBPP in simple test project. But now when I'm doing something much more complex I've got this strange linker error LNK2019.
Exact error message is:
Error 2 error LNK2019: unresolved external symbol "class IBPP::Ptr<class IBPP::IDatabase>
__cdecl IBPP::DatabaseFactory(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)
" (?DatabaseFactory@IBPP@@YA?AV?$Ptr@VIDatabase@IBPP@@@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000000@Z)
referenced in function "class IBPP::Ptr<class IBPP::IDatabase>
__cdecl IBPP::DatabaseFactory(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"
(?DatabaseFactory@IBPP@@YA?AV?$Ptr@VIDatabase@IBPP@@@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000@Z)
C:\ff-extensions\F4U\build\projects\F4UConv\Connections.obj F4UConv
Code for my connections looks like this:
Header
#ifndef Connections_h
#define Connections_h
#include <cstdarg>
#include <string>
#include "ibpp\ibpp.h"
#include "..\Logger\Logger.h"
using namespace std;
namespace Connections{
class Connection {
public:
void set_logger(Logger::Logger *logger);
virtual bool setup_connection(string machine, string db_path, string login, string passwd)=0;
virtual bool connect()=0;
virtual bool disconnect()=0;
virtual bool setup_statement(string sql_statement, const char *fmt, ...)=0;
template <class Statement>
Statement execute_statement();
protected:
string machine;
string db_path;
string login;
string passwd;
Logger::Logger *logger;
};
class FB_Connection : public Connection {
public:
~FB_Connection();
bool setup_connection(string machine, string db_path, string login, string passwd);
bool connect();
bool disconnect();
bool setup_statement(string sql_statement, const char *fmt, ...);
template <class Statement>
Statement execute_statement();
private:
IBPP::Database db;
};
};
#endif Connections_h
Source
#include "Connections.h"
namespace Connections{
void Connection::set_logger(Logger::Logger *logger){
this->logger = logger;
}
FB_Connection::~FB_Connection(){
if(this->db->Connected()){
this->disconnect();
}
db->Drop();
}
bool FB_Connection::setup_connection(string machine, string db_path, string login, string passwd){
this->machine = machine;
this->db_path = db_path;
this->login = login;
this->passwd = passwd;
try{
this->db = IBPP::DatabaseFactory(this->machine, this->db_path, this->login, this->passwd);
this->db->Create(3);
}catch(IBPP::Exception& e){
if(logger != nullptr){
this->logger->log(Logger::LogMsgValue[Logger::E_LOGMSG_000002]);
this->logger->log(Logger::LEVEL_ERROR, e.ErrorMessage());
}
return false;
}
return true;
}
bool FB_Connection::connect(){
return true;
}
bool FB_Connection::disconnect(){
return true;
}
bool FB_Connection::setup_statement(string sql_statement, const char *fmt, ...){
return true;
}
template <class Statement>
Statement FB_Connection::execute_statement(){
return this;
}
}
I'm googling for two days and still don't know what's the problem. I understand what LNK2019 error means but don't know why it occurs in this case.
The line that generate this error is:
this->db = IBPP::DatabaseFactory(this->machine, this->db_path, this->login, this->passwd);
Can anyone show me what's wrong?
Oh, and I'm using Visual Studio 2012 Express.