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

 

 

 

 

 

 

 

 

 

arrow
arrow
    全站熱搜

    zxlin 發表在 痞客邦 留言(0) 人氣()