ibpp и mingw, совет (возможно кому-нибудь помогу)

Модератор: Модераторы разделов

Olegator
Сообщения: 2493
ОС: SuseLinux 11.2 KDE 4.3

ibpp и mingw, совет

Сообщение Olegator »

решил я конектиться к базе firebird с помошью ibpp, в винде для компиляции прог я использую eclipse+mingw+qt-eclipse-integration, сделал как написано на сайте ibpp: добавил в проект ibpp.h и all_in_one.cpp, в свою прогу добавил #include "ibpp.h", в ibpp.h добавил #define IBPP_WINDOWS и попробовал откомпилировать, но получил ошибку:

Код:

..\ibpp\_ibpp.cpp: In member function `ibpp_internals::GDS* ibpp_internals::GDS::Call()': ..\ibpp\_ibpp.cpp:150: error: cannot convert `const char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)' ..\ibpp\_ibpp.cpp:170: error: cannot convert `char*' to `WCHAR*' for argument `2' to `DWORD GetModuleFileNameW(HINSTANCE__*, WCHAR*, DWORD)' ..\ibpp\_ibpp.cpp:178: error: cannot convert `char*' to `WCHAR*' for argument `1' to `WCHAR* lstrcatW(WCHAR*, const WCHAR*)' ..\ibpp\_ibpp.cpp:179: error: cannot convert `char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)' ..\ibpp\_ibpp.cpp:183: error: cannot convert `char*' to `WCHAR*' for argument `1' to `WCHAR* lstrcatW(WCHAR*, const WCHAR*)' ..\ibpp\_ibpp.cpp:184: error: cannot convert `char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)' ..\ibpp\_ibpp.cpp:194: error: cannot convert `const char*' to `const WCHAR*' for argument `2' to `LONG RegOpenKeyExW(HKEY__*, const WCHAR*, DWORD, REGSAM, HKEY__**)' ..\ibpp\_ibpp.cpp:200: error: cannot convert `const char*' to `const WCHAR*' for argument `2' to `LONG RegQueryValueExW(HKEY__*, const WCHAR*, DWORD*, DWORD*, BYTE*, DWORD*)' ..\ibpp\_ibpp.cpp:202: error: cannot convert `char*' to `WCHAR*' for argument `1' to `WCHAR* lstrcatW(WCHAR*, const WCHAR*)' ..\ibpp\_ibpp.cpp:203: error: cannot convert `char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)' ..\ibpp\_ibpp.cpp:212: error: cannot convert `const char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)' ..\ibpp\_ibpp.cpp:217: error: cannot convert `const char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)'

погуглив я понял что дело в том что кодировка символов в mingw ANSI, а в вызываемых функциях API Windows - unicode. libstdc++ в mingw пока unicode не поддерживает, можно вместо libstdc++ использовать stlport, но скачав его я понял что с установкой заморочек много.
Решил я проблему так: в файл _ibpp.cpp добавил

Код: Выделить всё

#if (defined(__GNUC__) && defined(IBPP_WINDOWS))
#define LoadLibrary(...) LoadLibraryA(__VA_ARGS__)
#define lstrcat(...) lstrcatA(__VA_ARGS__)
#define GetModuleFileName(...) GetModuleFileNameA(__VA_ARGS__)
#define RegOpenKeyEx(...) RegOpenKeyExA(__VA_ARGS__)
#define RegQueryValueEx(...) RegQueryValueExA(__VA_ARGS__)
#endif

в Linux тоже сразу не откомпилировалось, что бы откомпилировалось я в файл .pro добавил

Код: Выделить всё

LIBS+=-lfbclient

теперь всё работает.
теперь если кто-нить столкнётся с этой проблемой, то сможет найти решение здесь :)
Спасибо сказали: