2011年8月18日 星期四

建立一個在win平台下,以gcc為開發工具的harbour+hwgui的資料開發工具

建立一個在win平台下,以gcc為開發工具的harbour+hwgui的資料開發工具
並解決中文的問題(如能用utf8更讚)

需安裝套件如下
-----------------------------------------------------------------------
1.MingGW (只需裝預設的c complier) from GNU
http://ncu.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-inst/mingw-get-inst-20110802/mingw-get-inst-20110802.exe
2.QT lib from www.nokia.com
http://get.qt.nokia.com/qt/source/qt-win-opensource-4.7.3-mingw.exe
3.TortoiesSVN (或自己用習慣的SVN client)
http://ncu.dl.sourceforge.net/project/tortoisesvn/1.7.0-beta2/Application/TortoiseSVN-1.7.0-beta2-win32-svn-1.7.0-dev.msi
-----------------------------------------------------------------------

****準備動作****
本人以d:\s為計畫ROOT
g為MingW的ROOT
q為QT lib的ROOT
預計
h為harbour的ROOT
u為hwgui的ROOT

環境設定。path納入gcc及qt的bin
path=d:\s\g\bin;d:\s\q\bin
將1-3套件裝好之後,就開始吧

****開始行動****

****make harbour-------------------------------------------------------
將最新的harbour-project\trunk\harbour checkout到d:\s\h下
開啟命令視窗於 d:\s\h
D:\s\h>set path=d:\s\g\bin;d:\s\q\bin
D:\s\h>win-make
等待完成
copy lib\win\mingw\* lib -->沒這動作,會找不到lib檔


win-make.exe是win32平台下自動的harbour make程式。
會自動在路徑中找各種c complier,自動判斷如何make.
使用gcc make一定要裝qt lib 不然會找不到moc.exe rcc.exe的嚴重錯誤

我以前用過bcc則不用。不知道理由為何。總之費了一些力氣上網搜尋之後
裝了nokia的QT lib才能解決。
-----------------------------------------------------------------------

****make hwgui---------------------------------------------------------
將最新的hwgui\trunk\hwgui checkout到d:\s\u下
開啟命令視窗於 d:\s\u
D:\s\u>set path=path=d:\s\g\bin;d:\s\q\bin
將makefile.gcc修正如下
----------------------------------
HRB_DIR = d:\s\h
INC_DIR = d:\s\u\include
CFLAGS = -DUNICODE -DUTF8 -Wall -mno-cygwin -O3 -march=pentium -DHWG_USE_POINTER_ITEM
----------------------------------
重點在1.路徑 2.加上UNICODE及UTF8的Define (UNICODE又稱UTF16,所以要加兩個)

******重點在這裡*******
接下來,跟據http://www4.zzz.com.tw/phpbb2/viewtopic.php?t=334修改hwgui的部分內容
*1.
Modify hEdit.prg: 或去跟站長ssbbs要最新修改版
Change METHOD OnEvent() to METHOD OnEventOld()
add METHOD OnEvent:
//-------------------------------------------------------------------
METHOD onEvent( msg, wParam, lParam ) CLASS HEdit
IF ::cType='C' .AND. Empty( ::cPicFunc ) .AND. Empty( ::cPicMask )
RETURN -1
Else
RETURN ::onEventold( msg, wParam, lParam )
ENDIF
RETURN nil
//-------------------------------------------------------------------
*.2 從上述網址下載rar檔,將裡面source\unicode.c 複到到source\下
*.網址上原作者用bcc, 對自寫了ssbbs.bat , ss_make_b32.bat 及 ssmakefile.bc
跟據上三檔來作修正
ssbbs.bat : path與haubour路徑設定。
ss_make_b321.bat : 可以看出主要是加-DUNICODE -DUTF8於make那兩行
ssmakefile.bc :可以看出主要是加-DUNICODE -DUTF8於CFLAG外,hwgui.lib多了unicode.obj
------修改成適用於mingw-------------------------
makemngw.bat
最前面加入以下二行
if not exist lib md lib
if not exist obj md obj

makefile.gcc
加-DUNICODE -DUTF8於CFLAG,hwgui加unicode.o
********重點結束**************

D:\s\u>makemngw
等待完成
-----------------------------------------------------------------------


-----------------------------------------------------------------------
最後,samples底下及各目錄都有自己bld.bat,請不要用,那是bcc專用的
請用 ..\bldgw.bat,但需修正如下
-------此4行跟據你的安裝目錄修改-----
set path=d:\s\g\bin;d:\s\q\bin
set MINGW=d:\s\g
set HRB_DIR=d:\s\h
set HWGUI_INSTALL=d:\s\u
--------------------------------------
第一個gcc那行加上-DUNICODE -DUTF8 :
gcc -DUNICODE -DUTF8 -I. -I%HRB_DIR%\include -mno-cygwin -Wall -c %1.c -o%1.o


第二個gcc那行加上-DUNICODE -DUTF8,外
後面harbour的lib部分可能年代久遠,名稱錯一堆
-L%HRB_DIR%\lib2 ->-L%HRB_DIR%\lib
vm ->hbvm
rdd ->hbrdd
macro ->hb marco
pp ->hbpp 重複兩個,刪掉一個
rtl ->hbrtl
codepage ->hbcpage
lang ->hblang
common ->hbcommno
nulsys ->hbnulrdd (找超久...)
dbfntx ->rddntx
dbfcdx ->rddcdx
dbfftp ->rddfpt
gtgui ->gtwin

gcc -Wall -mwindows -o%1.exe %OBJ_LIST% -L%MINGW%\lib -L%HRB_DIR%\lib -L%HWGUI_INSTALL%\lib -mno-cygwin -Wl,--allow-multiple-definition -Wl,--start-group -lhwgui -lprocmisc -lhbxml -lhbvm -lhbrdd -lhbmacro -lhbpp -lhbrtl -lhbcpage -lhblang -lhbcommon -lhbnulrdd -lrddntx -lrddcdx -lrddfpt -lhbsix -lgtwin -luser32 -lwinspool -lcomctl32 -lcomdlg32 -lgdi32 -lole32 -loleaut32 -luuid -Wl,--end-group

最後再加上這2行於最頭和最尾,是我的習慣。
if exist %1.exe del %1.exe 第1行
if exist %1.exe %1.exe 最後1行
------------------------------------------------------------------------
下面以samples\get\testget2.prg為例
直接 ..\bldgw testget2
選單上get a value,第二行
之前無法中文,之後可以,但取得內容為 ?????
在mian()裡,加上HWG_SETUTF8(),取得內容也正常了。
(注意程式只能用ansi檔,不能用utf8 or utf16)
接下來改這行看看
Local e6 := ansitounicode("中華民國")
完全破功 = = 只得-N兩字
想也是,在php下要用$str=iconv("big5","UTF-8",$str);
ansi碼跟本沒中文。至少也要有big5Tounicode()
或Setlocale('big5')吧
.......
Local e6 := memorea("utf8.txt") //uft8編碼的文字檔
則顯示:沒問題,游標移動:沒問題
輸入則ooxx死了

結果,肝燒了好幾夜,短命的結果仍是白忙一場。
謝幕
-------------------------------------
後註:如果用big5+unicode補完可以接受的話,
倒是勉強成功
***日後有成功再來修改此文**

沒有留言: