導航:首頁 > 源碼編譯 > 編譯動態庫和字元集有關系嗎

編譯動態庫和字元集有關系嗎

發布時間:2024-08-29 02:34:54

編譯預處理命令是C語言文本的一部分嗎

(1)首先編譯預處理命令不是C語言文本的內容,是某個編譯工具的功能,不同的編譯工具,功能及命令是可能不同的。
(2)C語言程序的入口函數與開發工具及提供的運行庫有關,通常在鏈接時可以指定,如採用MS VC時,可以在link 時使用 /ENTRY:function 指定,function就是入口函數,但function必須是運行啟動庫中支持的入口函數,如:mainCRTStartup 就是調用會調用主函數 main() 的入口函數,wmainCRTStartup 則是寬字元版本,會調用主函數wmain(),WinMainCRTStartup 則會調用主函數WinMain()。因此,入口函數是運行庫提供的,當然你也能定製自己的運行庫,自己編寫入口函數,入口函數主要是完成內存及運行庫的初始化工作, 在C語言中 main函數是主函數,就是入口函數完成初始化工作後調用的函數。MS VC中,C可以編寫控制台,窗口應用、DLL動態庫等不同的應用類型代碼,並有多種字元集代碼頁的運行庫, 因此有不同的初始化環境,也就有不同的入口函數及主程序。

② Java和C語言有什麼區別

從概念上看,C語言是一門面向過程、抽象化的通用程序設計語言;Java是一門面向對象編程語言,而Java語言是從C語言衍生而來,它吸收了C++語言的各種優點,並且摒棄了C++里難以理解的多繼承、指針等概念。從概念可以看出C語言相當於Java的基礎語言,學完C再學Java會更容易。

從應用領域上,C語言和Java的應用領域幾乎沒有重合。因為隨著這幾年Java、web、PHP等語言的出現,它們憑借比C更簡潔的、更安全的性能快速崛起,搶佔了大量的市場。目前因為Java有完善的框架,在多線程、高並發方面有著較好的穩定性,所以Java主要應用於企業級應用開發、大型系統開發等領域。而C語言由於編程的復雜性,退守到了系統級別語言,而且因為想要系統級軟體可以發揮出機器的功能,它的底層核心就需要用C/C++來編寫,所以C語言主要應用於軟體工業。

③ 如何在WTL和MFC中使用ilib及如何靜態使用ilib庫

現在把我在實現過程中遇到的問題及解決方法列舉一下 以便大家以後遇到問題的時候做一個參考。

1.我喜歡用靜態庫,不喜歡用動態庫,用動態庫就好像穿衣服還要隨身攜帶衣架一樣,多餘還麻煩。

所以在用這個庫的時候 第一件事就是把動態庫變成靜態庫。還有改用成 unicode字元集

(1).找到uilib.h頭文件 注釋掉原有的定義:添加新的宏 #define UILIB_API

//#ifdef UILIB_EXPORTS
//#define UILIB_API __declspec(dllexport)
//#else
//#define UILIB_API __declspec(dllimport)
//#endif

(2)編譯後不會報錯,然後 在使用時就可以直接包含這個靜態庫了 同時要注意一點 還需要包含 幾個靜態庫oledlg.lib i.lib winmm.lib comctl32.lib

雖然也不簡單,但是卻可以讓程序生成後 只有一個exe 也沒有其他累贅。

2. 包含之後 編譯工程 會報錯createtextserver沒有定義什麼的。這個是因為新版本中加入了richedit支持,這個directui的 需要用到 texthost和textserver 這時候 需要引用richedit.dll和richedit.lib 為了方便,我把這部分的導入 放到了ilib庫裡面了。 至於是什麼代碼我就不貼了 導入庫的代碼 是個程序員就會了。

3.如果你的wtl ATL MFC文件已經包含了 atltypes之類的頭文件,那你會發現會出N多的 crect cpoint csize等 說不知道用哪個。因為ilib自己實現了這三個函數 和ATL MFC WL裡面的沖突了。那麼這時候怎麼辦呢?.. 當然是用宏了,我們在ilib的 uibase.h下面可以找到他們定義 在定義前加#ifndef DUI_NOTYPES 定義後追加 #endif 這樣我們在WTL中引入ilib庫的時候 引用前加入 #define DUI_NOTYPES 就可以屏蔽掉那些錯誤了。

4. 接下來的問題 都快讓我崩潰了,不過最後還是解決了。

在前面問題逐一解決之後 你會發現 項目里的很多地方都莫名其妙的報錯了,甚至連最基本的 CDC CmemeryDC Cpen什麼的都不認了 報一堆錯誤。

錯誤原因在於ilib裡面的 windowsx.h頭文件,這個是sdk編程人員不可能不知道的頭文件了,裡面是一些宏的定義,大大的方便了sdk編程。

而在這里卻成了阻礙,那麼怎麼辦呢? 我看了下報錯的地方 又看了下windowsx裡面宏,發現其實原因很簡單,裡面的一些宏定義和WTL的函數定義沖突了。那麼這個時候 我們需要使用微軟的 函數保護機制了。在我的項目中有沖突的是下面幾個函數 SelectFont SelectPen 其實還有很多 selectbrush等。報什麼錯就加什麼 沒有必要一次加齊。

#ifdef _INC_WINDOWSX
#undef SelectFont
#undef SelectPen
#endif // _INC_WINDOWSX

5.那麼到這個時候就可以正常的在WTL中使用ilib庫了。

6.那麼我們來說說 那棵樹的實現。

樹無疑 就是裡面的list靠縮進實現了。節點我選擇用以下模式做的。這樣後面排序的時候 我只需要交換CHorizontalLayoutUI就可以了 而無須改變

CListContainerElementUI 索引號了。

CListContainerElementUI

CHorizontalLayoutUI

控制項

控制項

CHorizontalLayoutUI

CListContainerElementUI

7.自動計算下滾動條,

CListContainerElementUI 沒有自動計算下滾動條的功能,可能是因為是容器 裡面的東西多少位置之類的都無法確定吧。

我的項目為了針對我這個項目 我在CHorizontalLayoutUI 插入了Ctextui 在底層庫裡面加入自動計算Ctextui 的寬度並設置CListContainerElementUI 寬度的邏輯就可以了

在這個過程總需要注意CListContainerElementUI 的setfixwight 有刷新的 會導致死循環 所以要加一個默認參數。

8.排序 排序就不多說的 原理比較簡單 一個快速排序,然後 顛倒CHorizontalLayoutUI和 tag就可以了、我的快排寫的 比較麻煩好像 因為當時比較著急 寫的時候比較亂 不過還可以 至少實現功能了,但是目前只是葉子節點排序,如果想實現非葉子節點排序也不是不可以,但是會比較麻煩 因為我也不用 就沒寫,有興趣的自己寫下吧。

demo真是非常之簡單,只有一個treeviwe 其他的什麼都沒有.連標題欄什麼都沒寫 那些我相信大家很簡單的就能寫出來。我把demo放到csdn上 想看的下載吧 。轉載。

閱讀全文

與編譯動態庫和字元集有關系嗎相關的資料

熱點內容
安卓手機怎麼把錄的視頻裁剪 瀏覽:226
linux命令強制退出 瀏覽:77
videostation怎麼添加文件夾 瀏覽:184
pythonrawsocket 瀏覽:861
編譯原理計算思維能力 瀏覽:247
衛星加密技術的應用 瀏覽:901
怎麼看手機實用頻率高的app 瀏覽:72
c實現sha1演算法 瀏覽:784
h200cy1是多大壓縮機 瀏覽:62
hbase查看錶結構命令 瀏覽:861
怎麼將rar解壓成安裝包 瀏覽:29
程序員幾點開始學習 瀏覽:201
linux百度雲文件 瀏覽:398
下載軟體解壓到哪裡合適 瀏覽:264
百度智能雲演算法工程師 瀏覽:98
模鍛造pdf 瀏覽:212
dom編程api 瀏覽:58
批處理復制命令 瀏覽:503
廢鐵壓縮打包機 瀏覽:98
linux打開圖形界面命令 瀏覽:368