wxGTK-2.8.8 中,預設是 --enable-unicode,但是很奇怪的,configure --enable-unicode 之後,在 setup.h 裡面並不會
#define HAVE_WCSTOULL,結果導致使用 wxString 中的 ToLongLong 一直沒辦法法轉成 64 bits 的長整數。但是如
果是以 configure --disable-unicode,則 #define HAVE_STRTOULL。
結果呢,不管是 ansi build 或是 unicode build,底層都呼叫了 strtoll 及 strtoull 來做 64 bits 的長整數轉換。但是 unicode
實際上要用的是寬字元的 wcstoll 及 wcstoull,因此,在 unicode build 的情形下,使用了 strtoll 及 strtoull 是沒有辦法正確
的轉換成長長整數。
這個在 wxGTK-2.8.9 釋出之後就修正了。檢示這兩個版本的原始碼,發現了其中可能有關的地方:
diff -Nur wxGTK-2.8.8/configure.in wxGTK-2.8.9/configure.in --- wxGTK-2.8.8/configure.in 2008-06-20 17:07:14.000000000 +0800 +++ wxGTK-2.8.9/configure.in 2008-09-15 17:34:36.000000000 +0800 @@ -2786,8 +2866,8 @@ dnl at least under SGI these functions are only available in C99 code and not dnl in C++ so do these tests using C++ compiler AC_LANG_PUSH(C++) -if test "wxUSE_UNICODE" = "yes"; then - WX_CHECK_FUNCS(wcstoull) +if test "$wxUSE_UNICODE" = "yes"; then + WX_CHECK_FUNCS(wcstoull,,,[#include <wchar.h>]) else WX_CHECK_FUNCS(strtoull) fi |
WX_CHECK_FUNCS 定義在 acinclude.m4,定義的內容如下:
WX_CHECK_FUNCS(FUNCTIONS..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [EXTRA-DEFINES-AND-INCLUDES], [EXTRA-TEST-CODE]) |
所以…只差 #include <wchar.h> 而已?XD
全站熱搜
留言列表