【问题标题】:C++ DirectX 9 unresolved external symbolC++ DirectX 9 未解析的外部符号
【发布时间】:2020-10-28 16:08:38
【问题描述】:

是的,我包含了所有库,但每次我在 x64 中运行我的程序时,它都会给我一个未解析的符号,但在 x32 中完美运行??

严重性代码描述项目文件行抑制状态 函数“int cdecl DirectXInit(struct HWND *)”(?DirectXInit@@YAHPEAUHWND__@@@Z) DirectX Overlay D:\VSprojects\2020\Mygui\Garrysmod 中引用的错误 LNK2019 未解析的外部符号 Direct3DCreate9Ex 2\覆盖瞄准器\DirectX.obj 1

来源

    int DirectXInit(HWND hWnd)
    {
        if (FAILED(Direct3DCreate9Ex(D3D_SDK_VERSION, &p_Object)))
            exit(1);

        ZeroMemory(&p_Params, sizeof(p_Params));
        p_Params.Windowed = TRUE;
        p_Params.SwapEffect = D3DSWAPEFFECT_DISCARD;
        p_Params.hDeviceWindow = hWnd;
        p_Params.MultiSampleQuality = D3DMULTISAMPLE_NONE;
        p_Params.BackBufferFormat = D3DFMT_A8R8G8B8;
        p_Params.BackBufferWidth = Width;
        p_Params.BackBufferHeight = Height;
        p_Params.EnableAutoDepthStencil = TRUE;
        p_Params.AutoDepthStencilFormat = D3DFMT_D16;

        if (FAILED(p_Object->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &p_Params, 0, &p_Device)))
            exit(1);

        return 0;
    }





    char playerO[350] = { 0 };
    char enemyO[300] = { 0 };
    char aimbotO[300] = { 0 };
    char rect[300] = { 0 };
    int counter = 15;

    int Render()
    {


            p_Device->Clear(0, 0, D3DCLEAR_TARGET, 0, 1.0f, 0);
            p_Device->BeginScene();


            //Drawing Stuff

            DrawBorderBox(10, 10, 200, 200, 15, 255, 255, 0, 0);


            p_Device->EndScene();
            p_Device->PresentEx(0, 0, 0, 0, 0);
            return 0;

    }

标题

 #ifndef DIRECTX_H
#define DIRECTX_H


#include "Main.h"
#include "Drawings.h"
#include "read.h"

#include <Windows.h>
#include <iostream>


#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")


#include <dwmapi.h>
#pragma comment(lib, "dwmapi.lib")


extern IDirect3D9Ex* p_Object;
extern IDirect3DDevice9Ex* p_Device;
extern D3DPRESENT_PARAMETERS p_Params;
extern ID3DXLine* p_Line;
extern ID3DXFont* pFontSmall;

extern RECT rc;

int DirectXInit(HWND hWnd);
int Render();

#endif

同样,它很可能与包含无关,因为它就像 x32 中的时钟一样工作。

【问题讨论】:

  • 看起来你没有链接到d3d9.lib静态库

标签: c++ 64-bit directx


【解决方案1】:

使用旧版 DirectX SDK,您必须设置不同的 x86 与 x64 库包含路径:

在 32 位配置的 VC++ 目录中:

$(IncludePath);$(DXSDK_DIR)Include
$(LibraryPath);$(DXSDK_DIR)Lib\x86

在 64 位配置的 VC++ 目录中:

$(IncludePath);$(DXSDK_DIR)Include
$(LibraryPath);$(DXSDK_DIR)Lib\x64

Microsoft Docs

对于新项目,您应该使用 Direct3D 11,而您根本不需要使用旧版 DirectX SDK。

【讨论】:

    【解决方案2】:

    x32 和 x64 具有不同的项目配置,因为您可能需要将它们指向每个架构的不同库位置。仔细检查以确保当您选择 x64 时,库和包含目录仍指向您的 DirectX 包含和库文件夹。

    您还需要确保在您的包含下

    #include <d3d9.h>
    #include <d3dx9.h>
    

    你有

    #pragma comment(lib, "d3d9.lib")
    #pragma comment(lib, "d3dx9.lib")
    

    【讨论】:

    • 是的,它们确实具有相同的包含目录,但两者都在 x86 程序文件下 不确定,我认为它是相同的,并且可以在 x64 下工作 不要认为它
    • @Blue_Ball_Paul 您包含哪些内容,您是否使用#pragma comment 链接到 dx9 库?
    • 我需要单独的directx x64 sdk吗?
    • #include #include #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #pragma comment(库,“dwmapi.lib”)
    • 您能否编辑您的原始邮政编码以将整个 cpp 文件包含在导入中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2012-11-19
    • 1970-01-01
    • 2012-12-17
    • 2012-06-30
    相关资源
    最近更新 更多