Posts tagged ‘ibpp’

现象

Firebird 数据库表中字段类型为 Float,使用 IBPP set() 函数使用 double 类型设置 Prepared Statement 中对应的 Parameter 时发生错误。因运行时无法看到错误信息,虽然记录不能插入表,但程序也不总是在这个时候崩溃,因此这个问题相当隐蔽。

Continue reading ‘Firebird 字段类型与 IBPP set() 函数参数类型匹配问题’ »

现象

wxWidgets 与 IBPP 一同使用(连接 wxWidgets 库)时,

  • 如果使用 Unicode,则 IBPP 无法编译,错误信息:
    make -f makefile.gcc all
    g++.exe -c -o MinGWUnicodeDebug/all_in_one.o -fno-rtti -fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__ -DUNICODE  -D__WXDEBUG__ -ggdb -O0 -Wall -Wno-write-strings -I"C:/wx/include" -I"C:/wx/contrib/include" -I"C:/wx/lib/gcc_lib/mswud" ibpp\core\all_in_one.cpp
    In file included from ibpp\core\all_in_one.cpp:35:
    ibpp\core\_ibpp.cpp: In member function `ibpp_internals::GDS* ibpp_internals::GDS::Call()':
    ibpp\core\_ibpp.cpp:142: error: cannot convert `const char*' to `const WCHAR*' for argument `1' to `HINSTANCE__* LoadLibraryW(const WCHAR*)'
    ibpp\core\_ibpp.cpp:162: error: cannot convert `char*' to `WCHAR*' for argument `2' to `DWORD GetModuleFileNameW(HINSTANCE__*, WCHAR*, DWORD)'
    ibpp\core\_ibpp.cpp:170: error: cannot convert `char*' to `WCHAR*' for argument `1' to `WCHAR* lstrcatW(WCHAR*, const WCHAR*)'
    ... ...
  • 如果不使用 Unicode,编译通过,但运行时发生异常退出。

解决方案

针对第二种情况,不使用 wxWidgets 的编译选项 -fno-rtti,重新编译 IBPP(all_in_one.cpp)。

即在 Makefile 里把下面一行:

CPPFLAGS= -fno-rtti -fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__

改为

CPPFLAGS=-fno-pcc-struct-return -fstrict-aliasing -Wall -Wno-write-strings -D__WXMSW__ -D__GNUWIN32__ -D__WIN95__

故障消除。

Continue reading ‘使用 IBPP 访问 Firebird 数据库’ »