通過製作乙個小軟體得到的感悟

2021-06-23 05:44:48 字數 1533 閱讀 4589

每做乙個windows專案,都會遇到種種千奇百怪的問題,無論多複雜的問題,最終都能解決,但要不是baidu的幫助和熱心網友們解決問題的帖子,其中的一些問題是無法解決的。

我把最近在製作乙個小軟體過程中遇到的問題記錄下來,來看看問題的複雜性。

將同事linux下做的*.c源**移植到vs2010下,製作windows介面程式。

一.將*.c和*.h檔案加入到vs2010工程中。

1.vs2010中無頭檔案

2.給*.h下的函式宣告加extern "c" {}

3.snprintf(),popen,pclose改為_snprintf,_popen,_pclose,

4.creat(,0755)改為open(,_s_iwrite|_s_iread)

5.open(filename,o_rdonly)改為open(filename,o_rdonly|o_binary),否則後面無法正確讀出檔案資料。

6.為了引用方便,static函式去掉static宣告。

7.將*.c加入工程後,*.c檔案預設是依賴於預編譯標頭檔案的,去掉。

8..c檔案不支援c++的容器作為函式引數。

二.將所有的動態庫依賴改為靜態庫依賴。

1.將bcgcbpro改為靜態庫編譯

(1)鏈結時getsystemmetrics等四個函式找不到,報error2001錯誤。

多虧網友的解決方案:

#pragma warning(disable:4706)

#define compile_multimon_stubs

#include 

#pragma warning(default:4706)

(2)改為靜態鏈結mfc庫和runtime庫

2.將資源動態庫改為靜態鏈結(花費了70%)的時間

這方面的官方資料是最少的,通過網友的方法和自己的摸索,最終解決了問題。

3.將openssl改為靜態鏈結庫。

(3).按照說明文件編譯openssl為靜態庫

(4)區分lib檔案是靜態庫還是dll的導入庫的方法,lib /list *.lib

三.將工程的動態依賴改為靜態依賴後遇到的問題

程式執行後,listctrl派生控制項的顯示出現了亂碼,而在動態庫下顯示是正常的。

這個問題是最隱蔽的,沒有任何頭緒,只能一點一點,猜測,修改**,嘗試,周而復始。

最終發現問題出現在一條語句上面:

listctrlcl::drawitem()

通過反彙編發現verify(getitem(&lvi))對應的彙編**為空,根本沒有執行getitem()函式,

去掉verify()巨集後,即

listctrlcl::drawitem()

問題解決。verify(express)是mfc的巨集定義,在debug版本下,對表示式express校驗,如果express為false,引發程式報錯。

為何verify彙編後彙編**為空,問題肯定是出在「靜態鏈結mfc庫」的事實上,之前的mfc是動態鏈結的。

難道是靜態鏈結後巨集定義失效?簡單求助baidu後沒有答案,不想再深究下去了,還有好多任務作要做。

網頁實現製作乙個小日曆

在網頁上製作乙個日曆,利用jquery實現它,其實也不是很困難,參照網上的部分思想自己再深加工,乙個精美的日曆也就能呈現了 接下來談談實現它的函式思想 var date new date var show day new array 星期日 星期一 星期二 星期三 星期四 星期五 星期六 var s...

乙個商人的感悟

乙個商人的感悟 1 沒有拜讀文學,將失去心靈的平靜與生命的趣味 2 沒有研究歷史,將缺乏商人的謀略 3 對趨勢與程序的無知,將無法知道自己現身在何處 4 沒有實踐,永遠是紙上談兵 5 沒有定位,將無法突出重圍,出人頭地 6 沒有目標,必將終日悶悶不樂 7 沒有思考,語言將不具殺傷力 8 沒有質量的人...

最近寫的乙個小軟體

工具實現的功能很簡單,實現 查詢指定資料夾 及其下屬資料夾 的檔案中包含指定字串,或替換成其他字串的功能.介面如下 其實寫這個軟體的目的是因為 1.我正在看的乙個電子書 非 哈哈 中間都有大量網頁資訊廣告資訊的插入,非常不爽 2.日常操作經常想在一堆檔案中找到以前的某個語法的例子,卻苦於無現成工具....