在Windows中打开文件的最基本方法
我正在编写一个静态链接(到其他库或应用程序)的库。我想使我的图书馆尽可能小。我的图书馆需要阅读一个文件;文件名将提前知道,并且只包含ASCII字符。我的库将绝对没有用户界面或GUI代码;它只是需要调用的函数 我应该调用什么函数来打开我的文件,而链接器会带来尽可能少的额外代码 大概在Windows中打开文件的最基本方法,windows,Windows,我正在编写一个静态链接(到其他库或应用程序)的库。我想使我的图书馆尽可能小。我的图书馆需要阅读一个文件;文件名将提前知道,并且只包含ASCII字符。我的库将绝对没有用户界面或GUI代码;它只是需要调用的函数 我应该调用什么函数来打开我的文件,而链接器会带来尽可能少的额外代码 大概CreateFile()是一个基本的内置Windows功能,它位于共享库中。那么,我是否应该使用CreateFileA()(以避免转换为宽字符) 对于CreateFileA()我需要包括Windows.h;这会增加我图书
CreateFile()
是一个基本的内置Windows功能,它位于共享库中。那么,我是否应该使用CreateFileA()
(以避免转换为宽字符)
对于CreateFileA()
我需要包括Windows.h
;这会增加我图书馆的规模吗?如果是这样,定义WINDOWS\u LEAN\u和\u是否意味着有帮助
我应该只使用\u open()
?或者,我想它现在应该是\u sopen\u s()
?\u open并且它的派生版本使用标准的c库,这通常会增加库的大小。CreateFile是一个不错的选择。A或W取决于您是否需要使用Unicode进行链接,这将取决于您链接的对象 你知道所有以A
结尾的函数都只是W
函数的包装吗?为什么不只是ANSI C fiel函数呢?:fopen
,fread
,等等@JesseGood,我不明白你评论背后的意思。好的,以A
结尾的函数是包装器;这影响到我的问题。。。怎么做?@Linuxios,我要最小尺寸的。如果fopen()
和朋友们能让我的图书馆像CreateFileA()
一样小,那么我会欣然使用它们;与本机Windows函数相比,我几乎总是更喜欢*NIX函数。@steveha:这没有直接关系,但由于A
函数会产生开销(它们从ASCII转换为Unicode,然后调用W
函数),因此最好从+1开始使用W
函数。C库在Windows上不是“标准”库,因此必须静态链接它-=更大的二进制文件。如果只关心大小,A或W不会有什么区别,所有的函数都将来自外部DLL。@vanza--Visual C做了很多神奇而自动的事情。。。如何判断Visual C是否在标准C库中运行?例如,如果我#include
来获取像size\u t
这样的类型,这会使Visual C在库中发出咕噜声,还是我实际上需要引用库函数,以便链接器在库中链接?Visual C甚至没有显示链接器的实际输出,只是一个经过清理的状态列表,如下所示:Foo.vcxproj->C:\Users\steveha\Project\Debug\Foo.lib
@steveha:您需要引用库中的符号才能链接库。类型定义仅在头文件中,而不是在库中。因为您正在创建一个静态库,所以我认为链接器不会要求您立即链接msvcrt—就在应用程序静态链接您的库并创建自己的DLL或EXE时。@vanza--才有意义。我只是怀疑VisualC,因为它自动完成了很多工作,隐藏了很多东西!