Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

C++ Builder и C API MySQL

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Ярослав
Гость





СообщениеДобавлено: Чт Фев 21 2002 12:50    Заголовок сообщения: C++ Builder и C API MySQL Ответить с цитатой

Если кто - то работал с subj'ем, то напишите пожалуйста, как вы это делали, возникали ли при этом проблемы и были ли какие нибудь особенности. Я попытался написать свой класс, но в его функциях постоянно возникают необъяснимые ошибки.
Вернуться к началу
Pin



Зарегистрирован: 13.01.2002
Сообщения: 32
Откуда: Magnitogorsk

СообщениеДобавлено: Чт Фев 21 2002 17:46    Заголовок сообщения: Re: C++ Builder и C API MySQL Ответить с цитатой

Как это необъяснимые - любой ошибке можно найти объяснение. Все там нормально. Загружаешь libmysql.dll, выцепляешь функции и вперед...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ярослав
Гость





СообщениеДобавлено: Пт Фев 22 2002 11:45    Заголовок сообщения: Re: C++ Builder и C API MySQL Ответить с цитатой

Ну, это понятно - DLL я загрузил, функцию вызвал, но - коннект идет почти всегда, я получаю в принципе нормально структуру типа MYSQL_RES, а вот достать оттуда данные уже не могу. Ошибку самые разнобразные - беспричинное изменение переменной цикла, ошибка доступа к памяти именно при третьем прохождении цикла получения результатов и т.д. Посылаю кусок кода, может станет понятней
Я создал свой класс, но именно при обращении к API из функций класса возникают ошибки.

bool __fastcall TConnection::IsDatabaseExist(AnsiString Database)
{
bool ExitCode=false;
bool Exit;
AnsiString S;
TStringList *List=new TStringList;
const char *Name=Database.c_str();
res=MysqlListdbs(mysql,(char*)NULL);
if (res==0)
{
char *Err=MysqlError(mysql);
Application-MessageBox(Err,"Îøèáê&agr.. Exit=false;
return Exit;
};
rows=MysqlNumRows(res);
//const char *buf[1024];
MEM_ROOT buf=res-data-alloc;
for (int i=0; iAdd(S);
};
/* while(ExitCode==false)
{
row=MysqlFetchRow(res);
if (row==0) break;
Name=Database.c_str();
const char *ptr=row[0];
if (ptr==Name)
{
MysqlFreeResult(res);
Exit=true;
return Exit;
};
S=AnsiString(row[0]);
List-Add(S);
ExitCode=false;
row=NULL;
}; */
MysqlFreeResult(res);
Exit=false;
// delete List;
return Exit;
}
Вернуться к началу
Pin



Зарегистрирован: 13.01.2002
Сообщения: 32
Откуда: Magnitogorsk

СообщениеДобавлено: Пт Фев 22 2002 14:50    Заголовок сообщения: Re: C++ Builder и C API MySQL Ответить с цитатой

Хотелось бы поподробнее увидеть как ты загружал DLL и выцеплял функции. Если ты например поставил не тот модификатор вызова функции, то при вызове олбязательно произойдет порча стека с самыми разнообразными последствиями...
Важно очень аккуратно выцепить функции!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ярослав
Гость





СообщениеДобавлено: Сб Фев 23 2002 11:53    Заголовок сообщения: Re: C++ Builder и C API MySQL Ответить с цитатой

посылаю объявления функций и их вызов.

Объявление
class TBaseMonitor : public TThread
{
private:
HINSTANCE dllInstance;
typedef MYSQL* (*TMysqlConnect) (MYSQL *mysql,const char *host,const char *user,const char *passwd);
typedef MYSQL_RES* (*TMysqlListdbs)(MYSQL *mysql, const char *wild);
typedef int (*TMysqlSelectdb)(MYSQL *mysql, const char *db);
typedef int (*TMysqlQuery)(MYSQL *mysql, const char *query);
typedef void (*TMysqlClose)(MYSQL *mysql);
typedef char* (*TMysqlError)(MYSQL *mysql);
typedef void (*TMysqlFreeResult)(MYSQL_RES *result);
typedef int (*TMysqlNumRows)(MYSQL_RES *result);
typedef MYSQL_ROW (*TMysqlFetchRow)(MYSQL_RES *result);
typedef MYSQL_RES* (*TMysqlListTables)(MYSQL *mysql, const char *wild);

TMysqlConnect MysqlConnect;
TMysqlSelectdb MysqlSelectdb;
TMysqlQuery MysqlQuery;
TMysqlClose MysqlClose;
TMysqlError MysqlError;
TMysqlListdbs MysqlListdbs;
TMysqlListTables MysqlListTables;
TMysqlFreeResult MysqlFreeResult;
TMysqlNumRows MysqlNumRows;
TMysqlFetchRow MysqlFetchRow;

Вызов функций в срр-файле
//Çàãðóæà&arin.. áèáëèîòåê&oa.. è ïîëó÷àåì ïñåâäîíèì&ucir.. ôóíêöèé
AnsiString AddressDLL=GetCurrentDir()+"\\libmySQL.dll";
dllInstance=LoadLibrary(AddressDLL.c_str());
//Ôóíêöèè
MysqlConnect=(TMysqlConnect)GetProcAddress(dllInstance,"mysql_connect".. MysqlSelectdb=(TMysqlSelectdb)GetProcAddress(dllInstance,"mysql_select.. MysqlQuery=(TMysqlQuery)GetProcAddress(dllInstance,"mysql_query");
MysqlClose=(TMysqlClose)GetProcAddress(dllInstance,"mysql_close");
MysqlError=(TMysqlError)GetProcAddress(dllInstance,"mysql_error");
MysqlListdbs=(TMysqlListdbs)GetProcAddress(dllInstance,"mysql_list_dbs.. MysqlListTables=(TMysqlListTables)GetProcAddress(dllInstance,"mysql_li.. MysqlFreeResult=(TMysqlFreeResult)GetProcAddress(dllInstance,"mysql_fr.. MysqlNumRows=(TMysqlNumRows)GetProcAddress(dllInstance,"mysql_num_rows.. MysqlFetchRow=(TMysqlFetchRow)GetProcAddress(dllInstance,"mysql_fetch_..
Вернуться к началу
Pin



Зарегистрирован: 13.01.2002
Сообщения: 32
Откуда: Magnitogorsk

СообщениеДобавлено: Сб Фев 23 2002 13:06    Заголовок сообщения: Re: C++ Builder и C API MySQL Ответить с цитатой

А в объявлении функции случайно не надо добавить __stdcall?
Например
typedef MYSQL* __stdcall (*TMysqlConnect) (MYSQL *mysql,const char *host,const char *user,const char *passwd);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ярослав
Гость





СообщениеДобавлено: Вс Фев 24 2002 17:18    Заголовок сообщения: Re: C++ Builder и C API MySQL Ответить с цитатой

Ты абсолютно прав, я сейчас подставил, скомпилил - ни глюков, ничего. Еще обкатаю, но я думаю, все будет нормально, спасибо тебе.

Ярослав.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...