Добрый день!
Я экспортирую класс из DLL как написано в книгах, но главный проект никак не хочет собираться, не находит тело функций в lib файле, может это примудрости C++ Builder ? Экспорт работает только на Visual C++ ?
Вот код DLL :
Заголовочный файл:
#ifndef MYSQL_DLL_H
#define MYSQL_DLL_H
//---------------------------------------------------------------------------
#include <mysql.h>
//---------------------------------------------------------------------------
#ifdef SQLDLL_EXPORT
#define SQLDLL_EXPORT __declspec(dllexport)
#else
#define SQLDLL_EXPORT __declspec(dllimport)
#endif
//---------------------------------------------------------------------------
struct SQLDLL_EXPORT STLOGIN
{
AnsiString host;
AnsiString user;
AnsiString password;
AnsiString DB;
int clientflag;
int port;
};
//---------------------------------------------------------------------------
class SQLDLL_EXPORT TSQL
{
private:
MYSQL *sql_proc;
MYSQL_RES *Res;
MYSQL_ROW Row;
bool ConnectedMySQL;
public:
TSQL();
~TSQL();
void __fastcall ConnectMySQL(STLOGIN *stLogin);
void __fastcall DisconnectMySQL();
bool __fastcall GetStatusMySQL();
};
//---------------------------------------------------------------------------
#endif
Файл cpp:
#include <vcl.h>
#include <windows.h>
#include "MySqlDll.h"
#pragma hdrstop
//---------------------------------------------------------------------------
TSQL::TSQL()
{
//constructor
}
//---------------------------------------------------------------------------
TSQL::~TSQL()
{
//destructor
}
//---------------------------------------------------------------------------
void __fastcall TSQL::ConnectMySQL(STLOGIN *stLogin)
{
sql_proc = mysql_init(sql_proc);
sql_proc = mysql_real_connect(sql_proc,stLogin->host.c_str(),stLogin->user.c_str(),
stLogin->password.c_str(),stLogin->DB.c_str(),
stLogin->port,NULL,stLogin->clientflag);
if(!sql_proc) ShowMessage("Не доступен сервер MySQL Server!");
else ConnectedMySQL = true;
}
//---------------------------------------------------------------------------
void __fastcall TSQL::DisconnectMySQL()
{
if(sql_proc) mysql_close(sql_proc);
sql_proc=NULL;
}
//---------------------------------------------------------------------------
bool __fastcall TSQL::GetStatusMySQL()
{
return ConnectedMySQL;
}
//---------------------------------------------------------------------------
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
DLL файл собирается отлично. После копирую файл MySqlDll.h, MySqlDll.dll и MySqlDll.lib в папку с проектом exe
Подключаю все это дело в проект:
В Main.h подключаю #include "MySqlDll.h"
В Main.cpp создаю объекты
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include "About.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
#pragma comment(lib,"MySqlDll.lib")
//---------------------------------------------------------------------------
TMainForm *MainForm;
TSQL *SQLInterface;
STLOGIN *stLogin;
bool startMDI=false;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent *Owner)
: TForm(Owner)
{
SQLInterface = new TSQL();
stLogin = new STLOGIN();
}
//---------------------------------------------------------------------------
Ну и при сборке проекта получаю:
[ILINK32 Error] Error: Unresolved external 'TSQL::~TSQL()' referenced from E:\PROJECTS\DEBUG\MAIN.OBJ
[ILINK32 Error] Error: Unresolved external 'TSQL::TSQL()' referenced from E:\PROJECTS\DEBUG\MAIN.OBJ