Использование API (C++/Linux)
Модератор: kdv
Использование API (C++/Linux)
Вот в чём бида у меня я немогу нормально заинклудить библеотеки (это одно из проблем т.к. их как таковых нету) для того что бы мог использовать нужные функции для манипуляции БД через Firebird. (2.0)
т.е. вопрос.
КАК ПРАВИЛЬНО подключить нужные библеотеки что бы мочь использовать Firebird (InterBase) API.
я использую Dev-Cpp редактор и MinGW компилятор (он в нём) среда разработки Windows XP SP2.
коротко и ясно я немогу подключить/исользовать API мой компилятор ругаетьса (пишет функция ...referense@xxx (число напр 25) ну и всё... во время линкования) что он не может найти функцию которая спрятана за хиддером (ibase.h)
плиз кто знает в чём дело плиз подскажите ибо задолбало искать уже =\ пробывал много вариантов.
если не найду ответа наверно прийдётьса напрямую соурс Firebird'a использовать ТТ.
спасибо за внимание.
//PS желательно "объяснить" как это делать для win32 приложени и как для unix =) (Linux) сорри если чуть запутано наисано ^^ я newbie
т.е. вопрос.
КАК ПРАВИЛЬНО подключить нужные библеотеки что бы мочь использовать Firebird (InterBase) API.
я использую Dev-Cpp редактор и MinGW компилятор (он в нём) среда разработки Windows XP SP2.
коротко и ясно я немогу подключить/исользовать API мой компилятор ругаетьса (пишет функция ...referense@xxx (число напр 25) ну и всё... во время линкования) что он не может найти функцию которая спрятана за хиддером (ibase.h)
плиз кто знает в чём дело плиз подскажите ибо задолбало искать уже =\ пробывал много вариантов.
если не найду ответа наверно прийдётьса напрямую соурс Firebird'a использовать ТТ.
спасибо за внимание.
//PS желательно "объяснить" как это делать для win32 приложени и как для unix =) (Linux) сорри если чуть запутано наисано ^^ я newbie
на sql.ru толком никто не ответил. Я сам на C++ не пишу, но вот какие результаты дает поиск похожей ошибки (ошибка, кстати, классическая - дальше некуда):
http://subscribe.ru/archive/comp.soft.p ... 73900.html
Просто Вы не подключили библиотеку для работы с этими функциями gdi32.lib (в Вашем примере и user32.lib тоже используется), чтобы ее подключить нужно прописать в начале, после #include<windows.h> строчку
#pragma comment(lib,"gdi32")
либо при компиляции указать библиотеку:
cl example.cpp user32.lib gdi32.lib
в поставке FB 2 в каталоге lib есть 3 библиотеки - для компиляторов MS и Borland. Думаю, что для MinGW должен быть способ подключить одну из этих либ.
p.s. личное мнение по поводу C++ - такие вещи надо знать. По-моему это основы работы компилятора и линкера C++.
И вопрос надо было задавать на sql.ru, в разделе C++.
p.p.s. кстати, в вопросе на sql.ru у человека вроде был нормальный русский язык, пусть и с ошибками (на уровне 7-го класса школы). А тут прямо перекосило.
http://subscribe.ru/archive/comp.soft.p ... 73900.html
Просто Вы не подключили библиотеку для работы с этими функциями gdi32.lib (в Вашем примере и user32.lib тоже используется), чтобы ее подключить нужно прописать в начале, после #include<windows.h> строчку
#pragma comment(lib,"gdi32")
либо при компиляции указать библиотеку:
cl example.cpp user32.lib gdi32.lib
в поставке FB 2 в каталоге lib есть 3 библиотеки - для компиляторов MS и Borland. Думаю, что для MinGW должен быть способ подключить одну из этих либ.
p.s. личное мнение по поводу C++ - такие вещи надо знать. По-моему это основы работы компилятора и линкера C++.
И вопрос надо было задавать на sql.ru, в разделе C++.
p.p.s. кстати, в вопросе на sql.ru у человека вроде был нормальный русский язык, пусть и с ошибками (на уровне 7-го класса школы). А тут прямо перекосило.
угу спасибо но вроде Dev-Cpp как то коряво юзает #pragma
т.к. я даже не смог норм использовать пример который там по ссылке (который требует user32.lib, gdi32.lib)
до и после использования comment(lib,"gdi32")...
нету некакой разницы =( (делал всё как там + сам еще пробывал некоторые варианты)
у кого есть опыт с Dev-Cpp если можете то отпишитесь =)
т.к. я даже не смог норм использовать пример который там по ссылке (который требует user32.lib, gdi32.lib)
до и после использования comment(lib,"gdi32")...
нету некакой разницы =( (делал всё как там + сам еще пробывал некоторые варианты)
у кого есть опыт с Dev-Cpp если можете то отпишитесь =)
Обшее место:
gcc (mingw) не поддерживает ни #pragma comment(lib,...) ни #pragma link... - это расширения MS.
Ему библиотеки нужно честно указать в коммандной строке линкера.
В средах это обычно делается в настройке проекта на закладке link или library.
По поводу библиотек птицы - нужно использовать - fbclient_ms.lib - её mingw нормально хавает.
gcc (mingw) не поддерживает ни #pragma comment(lib,...) ни #pragma link... - это расширения MS.
Ему библиотеки нужно честно указать в коммандной строке линкера.
В средах это обычно делается в настройке проекта на закладке link или library.
По поводу библиотек птицы - нужно использовать - fbclient_ms.lib - её mingw нормально хавает.
угу я уже заметил что прагма не пашет как надо =) (спс)
вообщем с этим я разабралса мне подсказали юзать IBPP
короче вроде теперь всё норм.
НО при вызове Fetch вылетает прога =\
вроде конектитьса и начинает транзакцию норм и даже екзекутит процедуру вроде норм. (если не нор то прога вылетала тож)
но теперь она всегда вылетает на Fetch что бы там небыло =\\\\
(ну синтакс еррора ясно что нету =))
странно... чё то мне не везёт =(
вообщем с этим я разабралса мне подсказали юзать IBPP
короче вроде теперь всё норм.
НО при вызове Fetch вылетает прога =\
вроде конектитьса и начинает транзакцию норм и даже екзекутит процедуру вроде норм. (если не нор то прога вылетала тож)
но теперь она всегда вылетает на Fetch что бы там небыло =\\\\
(ну синтакс еррора ясно что нету =))
странно... чё то мне не везёт =(
т.е. на них кодить ? =) мне С/С++ по синтаксису привычней... + оптимальный вариант имхо.может тогда на бейсик или фрипаскаль посмотришь ? =)
да про Fetch()
st->Execute("execute procedure REPLI_GENERATE(2,'2008-01-1 10:50:23.0800')");
вот это я запускаю оно вроде выполняетьса.
НО Фетчь не имеет некаких строк в себе =/ поэтому и еррор.
*** IBPP::LogicException ***
Context: Statement::Fetch
Message: No statement has been executed or no result set available.
эта SQL процеду рабочия.
т.е. мне надо запустить процедуру и потом получить возращаемое значение.
есть такая фичя как желание упорство и практический опыт =)оптимальный вариант когда знаешь что пишешь или учебник есть.
ака что бы ты не делал тебе нужен практический опыт и достаточно много что бы уметь что то оптимально делать.
сорри что повтрояюсь но "задачя"
(я использую интерфей IBPP (www.ibpp.org) он оказалса самым оптимальным для этой задачи)
есть внутриния процедура (в самой БД)
она берёт integer, timestamp
return varchar(1024)
называетьса REPLI_GENERATE (но это не важно)
возращает по такому принцыпу
from s_replidels where repli_time between :repli_date and :to_time into one_raw do suspend;
(сама процедура рабочия это как бы 100% гарантия)
ну вот вопрос =) как правильно вызвать эту процедуру и получить эти возращаемые строки ? (и если есть особености установки транзакции то пожалуйста тоже указать их)
// ну С++ мне нужен как бы лично самому вот и пишу на нём вот напр для этого grimoire
kdv спасибо =) ты помог теперь всё почти ок =) не считая того что мне тока первый результат возращаетьса =) а сам Фетчь в цыкле while(st->Fetch())
может нужны какие нибудь особые комманды что бы шло продолжение выполнение процедуры ? (я вроде читал что суспенд "ждёт" до тех пор пока клиент не вызовет Фетчь и потом он сам дальше продолжает. в моём случие что то не очень работает)
(да я знаю что я нуб =) но всё же вы мне очень сильно помогли.)
даже вон небольшими подсказками.
еще раз спасибо =)
может нужны какие нибудь особые комманды что бы шло продолжение выполнение процедуры ? (я вроде читал что суспенд "ждёт" до тех пор пока клиент не вызовет Фетчь и потом он сам дальше продолжает. в моём случие что то не очень работает)
(да я знаю что я нуб =) но всё же вы мне очень сильно помогли.)
даже вон небольшими подсказками.
еще раз спасибо =)