[Cmake] WinMain

Nick Arini nick.arini at amersham.com
Mon Jun 7 10:41:02 EDT 2004


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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20040607/f12b7767/attachment.html


More information about the Cmake mailing list