dwing吧 关注:5,669贴子:89,044

回复:请问VC如何不链接任何C++运行库?

收藏回复

回复:15楼
额~ 我只写过 248字节的一个驱动,和一个也是200多字节的HelloWorld
没再继续压榨


IP属地:江苏禁言 |16楼2010-07-07 16:52
回复
    完全不使用VC自带的库是不可能的,因为VC的一些lib本身就是windows自身的运行库,完全不使用只有一种可能就是自己写并脱离windows的底层调用,不过,你确定你爱蓝屏么(笑)...
    ps:能完成这种设想的只能从底层ASM了吧...


    禁言 |17楼2010-07-29 04:08
    回复
      完全不使用VC自带的库 理论上是可能的 毕竟这些库也是有人写出来的


      IP属地:北京禁言 |18楼2010-07-29 09:37
      回复
        我改的GreenPad就沒有用任何CRT。


        IP属地:中国香港禁言 |19楼2010-07-29 13:11
        回复
          我的direct264里的CTAACEncoder,dshow2wav和FLT_Phase都没有用到CRT,第一个调用了ntdll.dll里的sprintf


          IP属地:美国禁言 |20楼2010-07-29 16:30
          回复
            • 72.52.65.*
            连exploer.exe也导入了msvcrt.dll,为什么你们还要尽量避免?


            21楼2010-07-29 17:48
            回复
              嗯...msvcrt确实不需要避免的,其实比ntdll还要通用一些


              IP属地:北京禁言 |22楼2010-07-29 18:51
              回复
                >为什么你们还要尽量避免?
                減少不必要的調用。不論是CRT的DLL還是靜態庫都有不少不必要的調用。
                >第一个调用了ntdll.dll里的sprintf
                用user32.dll的wsprintfW (Unicode) / wsprintfA (ANSI) 比直接調用NTDLL的更通用吧。


                IP属地:中国香港禁言 |23楼2010-07-29 19:02
                回复
                  > 減少不必要的調用。不論是CRT的DLL還是靜態庫都有不少不必要的調用。
                  虽然可以减少不必要的调用, 但有更多时候是需要crt提供的方便的函数.
                  > 用user32.dll的wsprintfW (Unicode) / wsprintfA (ANSI) 比直接調用NTDLL的更通用吧。
                  wsprintf是有缺陷的,主要是不支持浮点数(%f)


                  IP属地:北京禁言 |24楼2010-07-29 19:15
                  回复
                    >主要是不支持浮点数(%f)
                    wsprintf(yourBuffer, "%d.%d",
                    (int)smallvalue, (int)(smallvalue/1000));


                    IP属地:中国香港禁言 |25楼2010-07-29 20:38
                    回复
                      • 120.71.136.*
                      还有写NATIVE程序/WDM驱动,自带干粮,CRT没法用。


                      26楼2010-07-29 23:19
                      回复
                        msvcrt没什么不好啊,我ASM都调用C库函数的
                        比wsprintf + WriteFile输出到控制台 好用多了……
                        msvcrt是个dll,可以数据重用,节省系统不必要的开支


                        IP属地:江苏禁言 |27楼2010-07-29 23:25
                        回复
                          不太清楚的是哪些msvcrt里的函数需要初始化后才能调用
                          像sprintf之类的应该都可以调用,但printf就不清楚了


                          IP属地:美国禁言 |28楼2010-07-30 00:48
                          回复
                            > wsprintf(yourBuffer, "%d.%d",
                            > (int)smallvalue, (int)(smallvalue/1000));
                            这个写的不对吧. 再说还有很复杂的格式(如%3.2f)以及科学计数法,如果你自己实现会非常麻烦
                            > 不太清楚的是哪些msvcrt里的函数需要初始化后才能调用 
                            msvcrt是动态库, 载入时会自动做内部的初始化, 所以一般情况都不必担心. 可以看看VS附带初始化源码(crt0*.c)做了哪些处理.


                            IP属地:北京禁言 |29楼2010-07-30 09:38
                            回复