WinMainCRTStartup'的多个定义

问题描述 投票:0回答:3

我正在尝试编译本书Windows Graphics Programming Win32 GDI and DirectDraw提供的代码。我正在使用Dev C ++ IDE。代码来了

#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);
}

当我编译时出现以下错误

multiple definition of `WinMainCRTStartup' 
first defined here 
[Linker error] undefined reference to `WinMain@16' 
ld returned 1 exit status 
C:\Dev-Cpp\Projects\Win32GDIBasic2\Makefile.win [Build Error]  [Win32GDIBasic2.exe] Error 1 
winapi g++ gdi
3个回答
0
投票

错误消息告诉您,您具有两个WinMainCRTStartup()函数,一个是您定义的函数,另一个是您要链接到的运行时中的一个。

另一方面,您根本没有定义WinMain()。 Mehrdad是正确的,您应该调用主函数WinMain()

您是否使用与作为参考书的书相同的工具集(编译器,链接器等)?不同的工具集的名称略有不同,尽管总会有某种主要功能。

您不应该试图使代码的主要功能命名与本书完全一致。您应该得到它以符合您的工具集的期望。


1
投票

除非您在极少数情况下特别需要这样做,否则您不应该重新定义WinMainCRTStartup(这里似乎不是这样-您需要WinMain


0
投票

我在命令行上编译时得到了这个[[确切的错误:

WRONG:

gcc -x c MyCFile.CustomExtension -o object_file.o -m64 -std=c11 gcc -o EXE.exe object_file.o ./EXE.exe

CORRECT:

gcc -x c -c MyCFile.CustomExtension -o object_file.o -m64 -std=c11 gcc -o EXE.exe object_file.o ./EXE.exe

DIFF:

-c
© www.soinside.com 2019 - 2024. All rights reserved.