Не компилируется

Smeruxa

Известный
Автор темы
1,298
682
В чем ошибка?
1628274698667.png

Код:
C++:
#include <iostream>
#include <windows.h>
#include <d3d9.h>
#include <tchar.h>
#include <atlstr.h>
#include <stdlib.h>
#include <string.h>
#include <dinput.h>
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
bool windowWorking = false;
bool enable = true;
static LPDIRECT3D9              g_pD3D = NULL;
static LPDIRECT3DDEVICE9        g_pd3dDevice = NULL;
static D3DPRESENT_PARAMETERS    g_d3dpp = {};
bool CreateDeviceD3D(HWND hWnd);
void CleanupDeviceD3D();
void ResetDevice();
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

int main() {
    setlocale(LC_ALL, "ru");
    MessageBox(NULL, _T("Приложение было запущено! Чтобы управлять им - нажмите ALT + 9"), _T("Информационный диалог"), MB_OK);
    ShowWindow(GetConsoleWindow(), SW_HIDE);
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
    ::RegisterClassEx(&wc);
    HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX9 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
    while (!hwnd) {
        Sleep(0);
    }
    if (!CreateDeviceD3D(hwnd))
    {
        CleanupDeviceD3D();
        ::UnregisterClass(wc.lpszClassName, wc.hInstance);
        return 1;
    }
    ::ShowWindow(hwnd, SW_SHOWDEFAULT);
    ::UpdateWindow(hwnd);
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO(); (void)io;
    ImGui::StyleColorsDark();
    ImGui_ImplWin32_Init(hwnd);
    ImGui_ImplDX9_Init(g_pd3dDevice);
    ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
    while (true) {
        Sleep(0);
        if (enable) {
            if (GetAsyncKeyState(49) && GetAsyncKeyState(18)) {
                CString fromClipboard;
                if (OpenClipboard(NULL))
                {
                    HANDLE hData = GetClipboardData(CF_TEXT);
                    char* chBuffer = (char*)GlobalLock(hData);
                    fromClipboard = chBuffer;
                    GlobalUnlock(hData);
                    CloseClipboard();
                }
                MessageBox(NULL, _T("Текст в буфере обмена:\n----------\n") + fromClipboard + _T("\n----------"), _T("Скопированный текст"), MB_OK);
            }
        }
        ImGui_ImplDX9_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();
        if (windowWorking)
            ImGui::ShowDemoWindow(&windowWorking);
        {

        }
        ImGui::EndFrame();
        g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, FALSE);
        g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
        g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE);
        D3DCOLOR clear_col_dx = D3DCOLOR_RGBA((int)(clear_color.x * clear_color.w * 255.0f), (int)(clear_color.y * clear_color.w * 255.0f), (int)(clear_color.z * clear_color.w * 255.0f), (int)(clear_color.w * 255.0f));
        g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, clear_col_dx, 1.0f, 0);
        if (g_pd3dDevice->BeginScene() >= 0)
        {
            ImGui::Render();
            ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
            g_pd3dDevice->EndScene();
        }
        HRESULT result = g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
        if (result == D3DERR_DEVICELOST && g_pd3dDevice->TestCooperativeLevel() == D3DERR_DEVICENOTRESET)
            ResetDevice();
        if (GetAsyncKeyState(57) && GetAsyncKeyState(18)) {
            windowWorking = !windowWorking;
        }
    }
    ImGui_ImplDX9_Shutdown();
    ImGui_ImplWin32_Shutdown();
    ImGui::DestroyContext();
    CleanupDeviceD3D();
    ::DestroyWindow(hwnd);
    ::UnregisterClass(wc.lpszClassName, wc.hInstance);
    return 0;
}

bool CreateDeviceD3D(HWND hwnd)
{
    if ((g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
        return false;

    // Create the D3DDevice
    ZeroMemory(&g_d3dpp, sizeof(g_d3dpp));
    g_d3dpp.Windowed = TRUE;
    g_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    g_d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; // Need to use an explicit format with alpha if needing per-pixel alpha composition.
    g_d3dpp.EnableAutoDepthStencil = TRUE;
    g_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
    g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;           // Present with vsync
    //g_d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;   // Present without vsync, maximum unthrottled framerate
    if (g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_d3dpp, &g_pd3dDevice) < 0)
        return false;

    return true;
}

void CleanupDeviceD3D()
{
    if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; }
    if (g_pD3D) { g_pD3D->Release(); g_pD3D = NULL; }
}

void ResetDevice()
{
    ImGui_ImplDX9_InvalidateDeviceObjects();
    HRESULT hr = g_pd3dDevice->Reset(&g_d3dpp);
    if (hr == D3DERR_INVALIDCALL)
        IM_ASSERT(0);
    ImGui_ImplDX9_CreateDeviceObjects();
}

// Forward declare message handler from imgui_impl_win32.cpp
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

// Win32 message handler
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
        return true;

    switch (msg)
    {
    case WM_SIZE:
        if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED)
        {
            g_d3dpp.BackBufferWidth = LOWORD(lParam);
            g_d3dpp.BackBufferHeight = HIWORD(lParam);
            ResetDevice();
        }
        return 0;
    case WM_SYSCOMMAND:
        if ((wParam & 0xfff0) == SC_KEYMENU)
            return 0;
        break;
    case WM_DESTROY:
        ::PostQuitMessage(0);
        return 0;
    }
    return ::DefWindowProc(hWnd, msg, wParam, lParam);
}
 

.deserve

Участник
32
36
Что тебе не понятно со слов "неразрешенный внешний символ"?
Определение символа Direct3DCreate9 он ищет и не может найти. Он собрал все объектники и по итогу не разрешил данный символ (функцию, если тебе так будет понятнее).
Подключи directx sdk какую-нибудь с июня 10 года
 

Smeruxa

Известный
Автор темы
1,298
682
Что тебе не понятно со слов "неразрешенный внешний символ"?
Определение символа Direct3DCreate9 он ищет и не может найти. Он собрал все объектники и по итогу не разрешил данный символ (функцию, если тебе так будет понятнее).
Подключи directx sdk какую-нибудь с июня 10 года
Я абсолютно каждую программу завершил и все равно пишет это, не знаешь, как исправить?
В диспетчере задач закрыл, справа снизу закрыл всё, не знаю что делать
А код я брал из примера dx9
1628335489303.png
 

.deserve

Участник
32
36
Я абсолютно каждую программу завершил и все равно пишет это, не знаешь, как исправить?
В диспетчере задач закрыл, справа снизу закрыл всё, не знаю что делать
А код я брал из примера dx9
Посмотреть вложение 109064
Установщик не смог перебить твои рантайм vc++ пакеты входящие в группу распространяемых.
Я на убунте, не знаю че там щас с 10 виндой. Но попробуй через панель управления зайти в менеждер всех бинарников (программы и компоненты вроде) и удалить оттуда все что связано с vc++ redistributable.
Он по ходу сам поставит нужные, ну опираясь на то, что он пишет в логе.
Я бы на твоем месте запомнил что там у тебя за пакеты стоят (какой версии), чтобы потом если что откатить. Ну gta sa у тебя точно работать будет. Проблемы могут возникнуть с другими играми. Ну вообще я не думаю, что возникнут. Не бойся.
Если в конце он их не накатит - накати сам: ][оба

Другие игры просто сами могут ставить нужные для работы рантайм пакеты, и часто они у всех разные. Но при повторной установке они все равно их накатят обратно
 
Последнее редактирование: