From: <pb...@tr...> - 2003-09-25 10:04:29
|
> > > > > > In the following simple test case: > > > > > > [snip test case that defines both main() and WinMain()] > > > > > > > I would expect the entry point to be the "WinMain" if -subsystem > > windows > > > > is passed to the linker and "main" if it is not. > > > > I do not see this happening. If there is a main function it is used > > > > regardless of what is passed to the linker. > > > > How is it possible to use WinMain ??? > > > > > > Don't implement main() if you implement WinMain(). > > > > > > > Unfortunately it is not that easy :-) > > > > I need to have both main and WinMain defined but I wish to have the > > application entry point as WinMain when it is a GUI and main when it is > > a console. The reason for this is we provide a framework library and our > > customers simply need to define a main(), if they create a console > > application then their main is called directly but if they create a GUI > > application then our WinMain is called and we do some initialization and > > then call their main. This works using both msvc and Borland > > compilers. IMO just having a main should not override WinMain in a GUI > > application, is this something that has been left in to help porting > > from *nix to windows?? > > It's been a while since I looked at the startup code, > but IIRC it defines a _main() or __main() that calls > main() or WinMain() as appropriate, and the purpose is > just to support both GUI and console apps in windows: > nothing to do with *nix. But take a look and see how > it works. Maybe you could achieve your goal by > distributing your own startup object file. > Hi well yes .. look at the source it holds all the answers. there is this lovely comment: /* * For now the GUI startup function is the same as the console one. * This simply gets rid of the annoying warning about not being able * to find WinMainCRTStartup when linking GUI applications. */ and the console start code calls WinMain if the user has not a main, that is ok but IMO if it is GUI it should try first to call WinMain and then main if there was no WinMain, this would be relatively easy to implement! For now I will create a work around. I have defined a new entry point if it is a GUI and will do the initialization stuff my self. It works fine for except for this linking problem: ------------------------------------------ C:\DOCUME~1\pbuhler\LOCALS~1\Temp/ccW8aaaa.o(.text+0x9f):main.cpp: undefined reference to `__p__fmode()' C:\DOCUME~1\pbuhler\LOCALS~1\Temp/ccW8aaaa.o(.text+0x1db):main.cpp: undefined reference to `__getmainargs(int*, char***, char***, int, _startupinfo*)' C:\DOCUME~1\pbuhler\LOCALS~1\Temp/ccW8aaaa.o(.text+0x25e):main.cpp: undefined reference to `_imp___Z14__set_app_typei' ------------------------------------------ I declared them the same way as in the mingw runtime source. there must be a simple way to get it find the symbols. thanks for the help pascal |