none
Windows图形编程编译出来的例子无法运行 RRS feed

  • 问题

  • 看了《Windows图形编程》,新建一个Win 32空项目——Hello2,添加一个Hello2.cpp,把第二个例子的源码敲进Hello2.cpp,代码如下:

     

    //-----------------------------------------------------------------------------------//
    //       Windows Graphics Programming: Win32 GDI and DirectDraw        //
    //               ISBN 0-13-086985-6                  //
    //                                          //
    // Written      by Yuan, Feng               www.fengyuan.com  //
    // Copyright (c) 2000 by Hewlett-Packard Company        www.hp.com     //
    // Published     by Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com   //
    //                                          //
    // FileName  : hello2.cpp						                   //
    // Description: Hellow World Demo 2, full screen display, Chapter 1         //
    // Version  : 1.00.001, July 26, 2000                       //
    //-----------------------------------------------------------------------------------//
    
    #define STRICT
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <tchar.h>
    #include <assert.h>
    
    void CenterText(HDC hDC, int x, int y, LPCTSTR szFace, LPCTSTR szMessage, int point)
    {
    	HFONT hFont = CreateFont(- point * GetDeviceCaps(hDC, LOGPIXELSY) / 72,
    		0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE, 
    		ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, 
    		PROOF_QUALITY, VARIABLE_PITCH, szFace);
    	// assert(hFont);
    
    	HGDIOBJ hOld = SelectObject(hDC, hFont);
    
    	SetTextAlign(hDC, TA_CENTER | TA_BASELINE);
    
    	SetBkMode(hDC, TRANSPARENT);
    	SetTextColor(hDC, RGB(0, 0, 0xFF));
    	TextOut(hDC, x, y, szMessage, _tcslen(szMessage));
    
    	SelectObject(hDC, hOld);
    	DeleteObject(hFont);
    }
    
    const TCHAR szMessage[] = _T("Hello, World");
    const TCHAR szFace[]  = _T("Times New Roman");
    
    #pragma comment(linker, "-merge:.rdata=.text")
    #pragma comment(linker, "-align:512")
    
    extern "C" void WinMainCRTStartup()
    {
    	HDC hDC = GetDC(NULL);
    	// assert(hDC);
    
    	CenterText(hDC, GetSystemMetrics(SM_CXSCREEN) / 2,
    		GetSystemMetrics(SM_CYSCREEN) / 2,
    		szFace, szMessage, 72);
    
    	ReleaseDC(NULL, hDC);
    	ExitProcess(0);
    }
    
          然后编译生成Hello2.exe。双击Hello2.exe运行,提示Hello2.exe不是有效的Win32程序。请问如何把这个工程生成有效的Win32程序呢?


    前无古人,后无来者
    2010年10月25日 15:39

答案

  • #pragma comment(linker, "-merge:.rdata=.text")
    #pragma comment(linker, "-align:512")

    这两句话太专业了,没用,汗,去掉应该就行了。

    不过这个程序有什么用呢?


    0xBAADF00D
    2010年10月26日 13:22
    版主

全部回复

  • #pragma comment(linker, "-merge:.rdata=.text")
    #pragma comment(linker, "-align:512")

    这两句话太专业了,没用,汗,去掉应该就行了。

    不过这个程序有什么用呢?


    0xBAADF00D
    2010年10月26日 13:22
    版主
  • #pragma comment(linker, "-merge:.rdata=.text" )
    #pragma comment(linker, "-align:512" )

    这两句话太专业了,没用,汗,去掉应该就行了。

    不过这个程序有什么用呢?


    0xBAADF00D

    /ALIGN 选项指定程序线性地址空间中每一节的对齐方式。number 参数以字节为单位,并且必须是 2 的幂。默认值是 4K (4096)。如果对齐方式产生无效的图像,则链接器发出警告。

    除非正在编写诸如设备驱动程序的应用程序,否则应不需要修改对齐方式。

    可以用 /SECTION 选项的对齐参数修改特定节的对齐方式。

    指定的对齐值不能小于最大的节对齐。

           这个程序的作用是在屏幕上打印"Hello world"。

     

     


    前无古人,后无来者
    2010年10月27日 13:59