最先遇到的問題是編譯的問題,我覺得環境對于一個新手有致命的阻礙作用。可能有人會說,去 google 一下不就完了,可是,實際上新手可能根本就不知道要 google 什么,我學 c 很多次放棄基本上都是環境原因。
這次弄 c 主要是為了和 lua 腳本語言集成,其實用 java 也有得選,luajava 不失為一個好的選擇。但是長久以來的小體積什么都不依賴就能運行的 c 程序(.exe)文件對我很有吸引力,因為發布 java 程序就意味著要伴隨十幾M的jre(哪位知道不用jre的,請務必教教在下),所以,這次決定了,學習 c!
IDE 嘛,就選擇了 CDT,實在是太習慣eclipse了,然后就是用 Programing in lua 中copy個例子下來,編譯。我靠,錯誤,想了想,把 lua 的那些頭文件加進來,把 lib 目錄也加進來,我靠,還是編譯不過,崩潰了,放棄。
sigh,c編譯是我永遠的痛!
一天在公司里,突然想起有個同事是弄 c 的,問問他吧。他人好熱情,給我講了好多。終于明白了,不僅要把 lib 目錄加進來,還要指定具體的 lib 文件名字,編譯通過,迎來了全新的世界。
經過一段時間的亂弄,終于如愿的把程序編譯成動態鏈接庫(windows下的dll),引入到 lua 里,插曲:lua 原來引入動態鏈接庫是全局的 function 叫 loadlib ,我靠,升級到 5.1 竟然改成了 package.loadlib,害我 google 了半天。不過其實 5.1 的 changelog 里是說了的,^_^
我的 lua 終于可以調 c api 了,快樂之情無法表達啊!
來,再做一個使用 c 訪問網頁的功能,找了半天,決定使用 wininet 庫,跑到 ms 的 msdn 上一頓猛找啊,終于,皇天還不負我這個學c有心人,終于在一個 xx 角落里找到了 wininet 的 api,我,我終于可以用他連網了!
經過一會兒的奮斗,終于,從
http://localhost:8080/index.html 中,把自己 tomcat 的主頁訪問了出來,快樂的瞬間!
馬上就發現這個程序有間歇性失憶,一會兒好用,一會兒不好用。共發生過以下幾種失憶情況:
1、把代碼 copy 到一個函數中,在 main 調用這個函數,程序運行失敗!
2、刪除了調試用的 printf 方法,程序運行失敗!
3、夸張,這個是最夸張的!把 BOOL b = HttpSendRequest(req, NULL, 0, NULL, 0); 前面的 BOOL b = 去掉,只留下 HttpSendRequest(req, NULL, 0, NULL, 0);,失敗!!!!!!!這樣居然都失敗!加上去就好好的運行。精神一度處于崩潰的邊緣,眼睛里的血絲一度超過狼人!
左思右想,左改右改,死都不行!
一個聲音高叫著:放棄吧,玩會游戲!
放棄了,md,再也不被 c 玩了,俺要玩俺的 java 去,下載 luajava 去,不理你了!
臨行前,我戀戀不舍地看了一眼俺的c代碼,我靠,突然發現這 xx 代碼居然有個問題,這真是豁然開朗啊。
原來是。。。(省略一萬字)
LPDWORD n; // LPDWORD 是個 unsigned long *
沒初始化!
天啊,這點問題就讓我找了這么久啊,我改。
DWORD a = 0;
LPDWORD n = &a;
一切正常。
世界終于清靜了……
posted on 2007-09-06 21:50
哈哈的日子 閱讀(1150)
評論(3) 編輯 收藏