2012-07-06 64 views
3

我正在寫一個靜態鏈接到其他庫或應用程序的庫。我想讓我的圖書館儘可能小。我的圖書館需要讀取一個文件;該文件的名稱將被預先知道,並且只包含ASCII字符。我的圖書館將絕對沒有用戶界面或GUI代碼;它只是被調用的函數。在Windows中打開一個文件的最基本的方法

打開我的文件時應該調用什麼函數,並且鏈接器需要儘可能少的附加代碼?

推測CreateFile()是一個基本的內置Windows功能,它存在於共享庫中。那麼,我應該只使用CreateFileA()(以避免轉換爲寬字符)?

對於CreateFileA()我需要包括Windows.h;這會增加我的圖書館的大小嗎?如果是這樣,確定WINDOWS_LEAN_AND_MEAN有幫助嗎?我想用_open()?或者,我想現在應該是_sopen_s()

+0

你知道所有以'A'結尾的函數只是'W'的包裝嗎? – 2012-07-06 03:00:35

+0

爲什麼不只是ANSI C fiel函數?:'fopen','fread'等。 – Linuxios 2012-07-06 03:16:46

+0

@JesseGood,我沒有把握您評論背後的觀點。好的,以'A'結尾的函數是包裝器;這會影響我的問題......怎麼樣? – steveha 2012-07-06 04:11:36

回答

2

_open它的衍生物使用標準c庫,它將典型地增加庫的大小。 CreateFile是要走的路。 A或W取決於您是否需要使用Unicode鏈接,這取決於您鏈接的內容。

+0

+1。 C庫在Windows上不是「標準」,所以你必須靜態鏈接它 - =較大的二進制文件。如果只關心大小,A或W將不會有所作爲,所有函數將來自外部DLL。 – vanza 2012-07-06 04:18:38

+0

@vanza - Visual C做了很多事情,這是神奇的和自動的......我怎麼知道Visual C是否在標準C庫中sl??例如,如果'#include '獲得像'size_t'這樣的類型會在庫中產生Visual C slurp,還是我實際上需要引用一個庫函數,這樣鏈接器會鏈接到庫中? Visual C甚至沒有向我展示鏈接器的實際輸出,只是一個清理狀態列表,如下所示:'Foo.vcxproj - > C:\ Users \ steveha \ Project \ Debug \ foo.lib' – steveha 2012-07-06 05:34:59

+1

@steveha:你需要從庫中引用一個符號來需要鏈接庫。類型定義只在頭文件中,而不在庫中。由於你正在創建一個靜態庫,我不認爲鏈接器會要求你立即鏈接msvcrt - 只是當一個應用程序靜態鏈接你的庫並創建它自己的DLL或EXE時。 – vanza 2012-07-07 00:43:20

相關問題