Wednesday, May 23, 2007

補足WinCE對SCL的不足:Windows CE C Library Extensions

Windows CE C Library Extensions
WinCE是純Unicode(統一碼、萬國碼、單一碼)的系統,所以如果要把在WIN32應用程式搬到WinCE,遇到的第一個問題就是SCL(Standard C Library)無完整支援,這時"Windows CE C Library Extensions"就提供您解決這個問題的方案。

Monday, May 14, 2007

試用log4cxx及log4cpp

在網路上找logging library,那發現支援C++主要有三個
  1. log4cpp
  2. log4cxx
  3. log4cplus
那log4cplus已經年久失修了,2002年後就沒維護,那log4cpp最新版是2005年的,我下載用的結果,發現使用了static data member initialization,所以在vc6下編譯不會過,那也就作罷!做後試log4cxx,這是Apache的其中一個子項,那編譯發生問題,不過上網查,有人跟我遇到相同的問題
編譯log4cxx-0.9.7發生cannot open input file "and.obj"錯誤
不過我很好奇的是,一般都不會發生這類問題!不過問題解決就好,接下來看如何用!!

Saturday, May 12, 2007

增加"標籤雲"及"繼續閱讀懶人加強版"

參考下列網頁:

介面出現以下效果:



為支援dp.SyntaxHighlighter所修改範本而增加的代碼

Friday, May 11, 2007

取代CE6.0教材的文章

這是上課老師建議可以取代CE6.0教材中Memory Marshalling的網頁:Memory marshalling in Windows CE

使用MFC建構具Automation功能的DLL(第一彈)

工作上需要在VB6呼叫VC6建構的library,那方法有下列幾種:
  1. 使用C介面輸出,在VB6中透過Declare...Lib方式引入。
  2. 使用ATL。
  3. 使用MFC,MFC+Automation或MFC ActiveX Control。
OK!講到這,我想大家都知道我選哪樣,為何ㄋㄟ?!因為就就建構COM的應用(Automation是COM一種應用!),MFC相較ATL簡單(可是 對很多人,兩樣都很難!),其原因是MFC的Wizard寫的比較好(這讓很多要入ATL之門的人為之氣結!)且比較好懂。(因為ATL使用大量的 template語法!);但就微軟已經揚棄的ActiveX技術來看,MFC所提供的,太肥了!不適合在網路上傳輸,那後來的COM+及.NET出來後 的ISAPI都是建議用或只能用ATL,所以ATL目前在COM相關應用是佔最重要的份量。 為求工作圖方便(其實是我ATL不熟!!),如題,那就是接下來所要展示的:
  1. 當然是透過最親愛的Project Wizard,建構個專案,這時要選擇MFC AppWizard(dll)
  2. 輸入專案名稱後就下一步,進入唯一的Wizard Page,那將Automation勾 選!就可一路OK,到進入IDE。
  3. 那接下來就在Class View選擇專案,右鍵彈出選單,選擇New Class...,出現一個Dialog如下:
  4. Bse classCombo Box選擇CCmdTarget, 那下面的Automation Radio boxes就 會被Enable,那選擇Creatable by type ID,如果選擇Automation的 話,VB6就不支援CreateObject的語法,建議type ID的格式為[Project Name].[Class Name]。
  5. OK!到這就在Class View可以產生一個類別且新增了一個Interface, 且Wizard會自動增加一個ODL檔。
  6. 接下來是新增屬性及方法,就是在Class View點選那個長得像尾巴打結的精蟲符號(我想很久,才想出這麼貼切的形容詞!),一樣,右鍵叫出Pop-up menu,選擇Add Method
  7. 到這步出現的Dialog是要建構Method用的,有幾個重要選項如下:
    1. External Name:輸入在VB6要看的名稱。
    2. Internal Name:輸入在對應類別的成員函式名稱。
    3. Return Value:我想大家都知道這是回傳值。
    4. Parameter list:輸入要傳入的引數。
  8. 這一步當然是要增加屬性,如同第六步,但是是選擇Add Property,會出現跟上一個Dialog超像的畫面,有幾個重要的項目如下:
    1. External name:輸入在VB6要看的名稱。
    2. Type:輸入在屬性的型別。
    3. Implementaion:要對應到類別的實做方法,有兩種可選,分別是Member variable及Get/Set methods。
夜已深!老婆催促我睡覺,那下次在把更多細節發佈!!

Thursday, May 03, 2007

測試 dp.SyntaxHighlighter

終於弄出來了!

首先先將shBrushCpp.js及SyntaxHighlighter.css上傳至Google Page Creator(找任何空間都可,但我用Google的!),在Google Page Creator右邊有個"Uploaded stuff"區塊,透過那個將檔案上傳!然後在blogger範本中依照參考網頁修改,那最後還有很重要一步是要在blogger中將"設定/格式"中的"轉換分行符號"取消,就可以成功了!!

新增程式碼區塊功能

為了能在網誌上顯示程式碼區塊,我參考以下網頁:

在文章裡顯示優質的程式碼區

文章中引用程式碼的作法

Blogger 顯示程式碼

本想用 dp.SyntaxHighlighter可是不知道要如將*.css檔上傳至blogger,只好作罷改天在弄。另外利用html標籤pre將程式碼縮排,讓code看起來比較好。

有找到dp.SyntaxHighlighter相關網頁如下:

dp.SyntaxHighlighter代碼高亮

dp.SyntaxHighlighter

為Lua新增函式呼叫

我想說要新增一個Table叫"CSH300CLibrary",那在下有個成員函式(這樣稱呼好像不洽當),叫"MessageBox",那查到有網頁提到如何做:

Lua 語言和C集成調研小結

那也可看官網的資料:

Programming in Lua : Table Manipulation

所以結果會是醬"CSH300CLibrary.MessageBox"去呼叫,希望能今天搞定!!那努力的結果,好像還是不行,只有去看"io.read"是如何做,源碼如下:

LUALIB_API int luaopen_io (lua_State *L) {
    luaL_openlib(L, LUA_OSLIBNAME, syslib, 0);
    createmeta(L);
    lua_pushvalue(L, -1);
    luaL_openlib(L, LUA_IOLIBNAME, iolib, 1);
    /* put predefined file handles into `io' table */
    registerfile(L, stdin, "stdin", IO_INPUT);
    registerfile(L, stdout, "stdout", IO_OUTPUT);
    registerfile(L, stderr, "stderr", NULL);
    return 1;
}
那其中 "iolib" 如下:

static const luaL_reg iolib[] = {
    {"input", io_input},
    {"output", io_output},
    {"lines", io_lines},
    {"close", io_close},
    {"flush", io_flush},
    {"open", io_open},
    {"popen", io_popen},
    {"read", io_read},
    {"tmpfile", io_tmpfile},
    {"type", io_type},
    {"write", io_write},
    {NULL, NULL}
};
仿造上面的寫法就可以搞定,另外為了能跟隨lua的習慣,原本"CSH300CLibrary.MessageBox"改成"sh300.msgbox"。