gru*_*htr 3 winapi linker c++builder
我使用旧的bcc32(borland 5.5)(我知道这是非常古老的编译器,但不要告诉我,我不应该使用它)
我可以使用控制台或Windows子系统进行编译.
我不想用windows子系统编译,我想控制台只有main()ad没有"windows.h"包含(从那里我调用我自己的库打开窗口并自己内部处理消息泵)
它的工作原理,但问题只是当我用控制台子系统编译时,出现丑陋的蓝色控制台窗口,我不需要它
所以我认为我只需要没有windows子系统编译,没有控制台子系统编译,只是让我的程序在一些原始模式下编译(两者都没有控制台创建,没有WinMain入口点 - 怎么做?
通常,当您不需要控制台时,应选择"GUI"或"Windows"子系统(取决于您的开发环境选择调用它).它控制链接器在EXE头中设置的位.程序开始运行后,您无法控制子系统,因为操作系统会读取您的EXE文件,并在执行程序中的任何代码之前确定要使用的子系统.
使用Windows子系统不需要任何窗口; 它只是告诉操作系统何时加载你的程序,你不需要一个控制台.它与您是否使用任何Windows API无关.这两个子系统都是完整的Windows应用程序,可以充分利用Windows API函数.
你可以从所有的同样的事情WinMain
,你可以从main
.有一些函数可以获取命令行并将其拆分为单独的参数.
但是,如果您不希望调用main函数,WinMain
则无法使用Windows子系统.子系统的选择还控制链接器在程序中放置哪组预备代码.准备代码是程序的真正入口点所在,它是初始化C++标准库并调用具有命名空间作用域的任何对象的构造函数.控制台模式中包含的代码调用main
(或wmain
); 为Windows子系统调用WinMain
(或wWinMain
)链接的代码.如果您使用Windows子系统并且没有定义名为的函数WinMain
,那么在链接时会出现错误; 链接器会抱怨一个未定义的函数.(如果包含那个标题是您所害怕的,那么您不必包含windows.h来定义WinMain
.)
由于子系统使用只是一套EXE头位的,你改变连接发生后有改变它的editbin
程序.链接时,选择控制台子系统,以便获取控制台准备代码main
,然后修改二进制文件以使用Windows子系统:
link foo.obj /out foo.exe /subsystem:CONSOLE editbin /subsystem:WINDOWS foo.exe
那你的程序将在没有控制台的情况下运行 请注意,如果在启动时出现任何问题,预备代码可能会导致程序崩溃,因为它写的是希望有一个可用于写入的控制台,但它不会存在.
归档时间: |
|
查看次数: |
353 次 |
最近记录: |