[Cmake] WinMain

William A. Hoffman billlist at nycap.rr.com
Mon Jun 7 11:07:11 EDT 2004


This is really a QT question.   You should look at some QT examples and
figure out how QT deals with WinMain.   If it has a WinMain, then use
the WIN32 option in ADD_EXECUTABLE:
ADD_EXECUTABLE(viewer WIN32 VIEWER_SRCS) 
If it uses main, then leave out the WIN32 option.

-Bill

At 10:41 AM 6/7/2004, Nick Arini wrote:

>Hi Andy, 
>
>Thanks for your prompt reply. 
>
>I modified my main.cpp file based on the example you sent me. The resulting code is below. I am now getting strange compiler errors: 
>
>What am I missing? Sorry if this is not strictly a cmake question. 
>
>Nick 
>
>
>------ Build started: Project: viewer, Configuration: Release Win32 ------ 
>
>Compiling... 
>main.cpp 
>C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinDef.h(143) : warning C4091: 'typedef ' : ignored on left of 'unsigned char' when no variable is declared 
>C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinDef.h(143) : error C2143: syntax error : missing ';' before 'constant' 
>C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinDef.h(143) : fatal error C1075: end of file found before the left brace '{' at 'C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinDef.h(30)' was matched 
>
>
>
><begin code> 
>
>#include "ImageViewer.h" 
>
>#include <qapplication.h> 
>
>
>int MyMain(int argc, char* argv[]) 
>{ 
>  QApplication myapp(argc, argv); 
>  
>  if ( argc <= 1 ) 
>    { 
>      // Create a window which looks after its own existance 
>      ImageViewer *mywidget = new ImageViewer(); 
>      QString title = "Image Viewer: "; 
>      title += "No image loaded"; 
>      mywidget->setCaption(title); 
>      mywidget->loadFile( "Resources/background.png" ); 
>          mywidget->setGeometry(50+(20), 50+(20), 256, 256); 
>      mywidget->setInitSize();  // snaps the window to the size of the image 
>      mywidget->show(); 
>
>    } else { 
>      for( int i=1; i< argc; i++ ) 
>        { 
>          ImageViewer *mywidget = new ImageViewer(); 
>          QString title = "Image Viewer: "; 
>          title += argv[i]; 
>          mywidget->setCaption(title); 
>          mywidget->loadFile( argv[i] ); 
>          mywidget->setGeometry(50+(i*20), 50+(i*20), 1000, 1000); 
>          mywidget->setInitSize();  // snaps the window to the size of the image 
>          
>          mywidget->show(); 
>        } 
>    } 
>
>  // handles shutdown of all windows 
>  QObject::connect(qApp, SIGNAL(lastWindowClosed()), qApp, SLOT(quit())); 
>
>
>  //  myapp.setMainWidget( mywidget ); 
>
>  // remember to show the widget 
>  //  mywidget->show(); 
>
>  return myapp.exec(); 
>
>} 
>
>
>// Now we need to set up the bits for the windows OS 
>    
>#ifdef _WIN32 
>#include <windows.h> 
>
>int __stdcall WinMain(HINSTANCE hInstance, 
>                      HINSTANCE hPrevInstance, 
>                      LPSTR lpCmdLine, int nShowCmd) 
>{ 
>  int          argc; 
>  int          retVal; 
>  char**       argv; 
>  unsigned int i; 
>  int          j; 
>
>  // parse a few of the command line arguments 
>  // a space delimites an argument except when it is inside a quote 
>
>  argc = 1; 
>  int pos = 0; 
>  for (i = 0; i < strlen(lpCmdLine); i++) 
>    { 
>    while (lpCmdLine[i] == ' ' && i < strlen(lpCmdLine)) 
>      { 
>      i++; 
>      } 
>    if (lpCmdLine[i] == '\"') 
>      { 
>      i++; 
>      while (lpCmdLine[i] != '\"' && i < strlen(lpCmdLine)) 
>        { 
>        i++; 
>        pos++; 
>        } 
>      argc++; 
>      pos = 0; 
>      } 
>    else 
>      { 
>      while (lpCmdLine[i] != ' ' && i < strlen(lpCmdLine)) 
>        { 
>        i++; 
>        pos++; 
>        } 
>      argc++; 
>      pos = 0; 
>      } 
>    } 
>
>  argv = (char**)malloc(sizeof(char*)* (argc+1)); 
>
>  argv[0] = (char*)malloc(1024); 
>  ::GetModuleFileName(0, argv[0],1024); 
>
>  for(j=1; j<argc; j++) 
>    { 
>    argv[j] = (char*)malloc(strlen(lpCmdLine)+10); 
>    } 
>  argv[argc] = 0; 
>
>  argc = 1; 
>  pos = 0; 
>  for (i = 0; i < strlen(lpCmdLine); i++) 
>    { 
>    while (lpCmdLine[i] == ' ' && i < strlen(lpCmdLine)) 
>      { 
>      i++; 
>      } 
>    if (lpCmdLine[i] == '\"') 
>      { 
>      i++; 
>      while (lpCmdLine[i] != '\"' && i < strlen(lpCmdLine)) 
>        { 
>        argv[argc][pos] = lpCmdLine[i]; 
>        i++; 
>        pos++; 
>        } 
>      argv[argc][pos] = '\0'; 
>      argc++; 
>      pos = 0; 
>      } 
>    else 
>      { 
>      while (lpCmdLine[i] != ' ' && i < strlen(lpCmdLine)) 
>        { 
>        argv[argc][pos] = lpCmdLine[i]; 
>        i++; 
>        pos++; 
>        } 
>      argv[argc][pos] = '\0'; 
>      argc++; 
>      pos = 0; 
>      } 
>    } 
>  argv[argc] = 0; 
>
>
>  // Initialize the processes and start the application. 
>  retVal = MyMain(argc, argv); 
>
>  // Delete arguments 
>  for(j=0; j<argc; j++) 
>    { 
>    free(argv[j]); 
>    } 
>  free(argv); 
>
>  return retVal;; 
>} 
>#else 
>int main(int argc, char *argv[]) 
>{ 
>  return MyMain(argc, argv); 
>} 
>#endif 
>
><end code> 
>_______________________________________________
>Cmake mailing list
>Cmake at www.cmake.org
>http://www.cmake.org/mailman/listinfo/cmake



More information about the Cmake mailing list