外部"C"错误 DirectX

Extern "C" Error DirectX

本文关键字:DirectX 错误 外部      更新时间:2023-10-16

我一直在尝试使用DirectX进行一般游戏编程,并一直遵循微软网站(http://msdn.microsoft.com/en-us/library/windows/apps/hh452790.aspx)上的教程。但是,每当我尝试做任何事情时,它都会抛出运行时错误。下面是我的代码:

#pragma comment (lib, "d2d1.lib")
#include<iostream>
#include<d2d1.h>
#include<Windows.h>

using namespace std;
int main()
{
    HWND hwnd;
    ID2D1Factory* pD2DFactory = NULL;
    HRESULT hr = D2D1CreateFactory(
        D2D1_FACTORY_TYPE_SINGLE_THREADED,
        &pD2DFactory
        );
    //Obtain the size of the drawing
    RECT rc;
    GetClientRect(hwnd, &rc);
    //Create a Direct2D rendertarget
    ID2D1HwndRenderTarget* pRT = NULL;
    HRESULT hr2 = pD2DFactory->CreateHwndRenderTarget(
        D2D1::RenderTargetProperties(),
        D2D1::HwndRenderTargetProperties(
            hwnd,
            D2D1::SizeU(
            rc.right - rc.left,
            rc.bottom - rc.top)
            ),
            &pRT
        );
    cout << "TEST" << endl;
}

这是我得到的错误:

        1>------ Build started: Project: Game, Configuration: Debug Win32 ------
1>  Main.cpp
1>c:userswilldocumentsvisual studio 2010projectsgamegamemain.cpp(21): warning C4700: uninitialized local variable 'hwnd' used
1>Main.obj : error LNK2028: unresolved token (0A00036A) "extern "C" int __stdcall GetClientRect(struct HWND__ *,struct tagRECT *)" (?GetClientRect@@$$J18YGHPAUHWND__@@PAUtagRECT@@@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Main.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall GetClientRect(struct HWND__ *,struct tagRECT *)" (?GetClientRect@@$$J18YGHPAUHWND__@@PAUtagRECT@@@Z) referenced in function "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>C:UsersWillDocumentsVisual Studio 2010ProjectsGameDebugGame.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

您缺少一个带有您使用的链接器的库(或者您使用的库中的代码需要它):

在这种情况下,缺少GetClientRect,因此

Right-Click on Project -> Linker -> Input -> Add Dependencies  
Add "User32.lib" to what is there.

在类似的情况下,在MSDN上查找函数名,您将看到所需的库名(如这里的GetClientRect)。