Вопрос Error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl overlay_start_hook(void)" (?overlay_start_hook@@YAXXZ) в функции DllMain.

  • Автор темы Автор темы Isvqqq
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
1 Ноя 2024
Сообщения
13
Реакции
0
Ошибка:
1>hook.c
1>trampoline.c
1>Создание кода...
1>x64\Debug\hook.obj : warning LNK4042: объект указан более одного раза; лишние не учитываются
1>ESP.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl overlay_start_hook(void)" (?overlay_start_hook@@YAXXZ) в функции DllMain.
1>C:\Users\Alex\Desktop\ESP\34\x64\Debug\ESP.dll : fatal error LNK1120: неразрешенных внешних элементов: 1
1>Сборка проекта "ESP.vcxproj" завершена с ошибкой.
========== Сборка: успешно выполнено — 0 , со сбоем — 1, в актуальном состоянии — 0, пропущено — 0 ==========
========== Сборка завершено в 23:50 и заняло 03,844 с ==========

Hook.cpp
C++:
Expand Collapse Copy
#include <Windows.h>
#include <d3d11.h>
#include <dxgi.h>
#include "MinHook.h"
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#include "hook.h"

#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "dxgi.lib")

typedef HRESULT(__stdcall* Present_t)(IDXGISwapChain*, UINT, UINT);
Present_t oPresent = nullptr;
ID3D11Device* g_pd3dDevice = nullptr;
ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
bool imgui_inited = false;

void RenderOverlay()
{
    ImGui::Begin("Overlay ESP Example", nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse);
    ImGui::Text("DX11 ImGui Overlay works!");
    ImGui::Text("FPS: %.1f", ImGui::GetIO().Framerate);
    ImGui::End();
}

HRESULT __stdcall hkPresent(IDXGISwapChain* pSwap, UINT Sync, UINT Flags)
{
    if (!imgui_inited)
    {
        if (!g_pd3dDevice)
        {
            pSwap->GetDevice(__uuidof(ID3D11Device), (void**)&g_pd3dDevice);
            g_pd3dDevice->GetImmediateContext(&g_pd3dDeviceContext);
        }
        DXGI_SWAP_CHAIN_DESC sd;
        if (SUCCEEDED(pSwap->GetDesc(&sd)) && sd.OutputWindow && IsWindow(sd.OutputWindow))
        {
            ImGui::CreateContext();
            ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
            ImGui_ImplWin32_Init(sd.OutputWindow);
            imgui_inited = true;
        }
    }
    if (imgui_inited)
    {
        ImGui_ImplDX11_NewFrame();
        ImGui_ImplWin32_NewFrame();
        ImGui::NewFrame();

        RenderOverlay();

        ImGui::EndFrame();
        ImGui::Render();
        ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
    }
    return oPresent(pSwap, Sync, Flags);
}

DWORD WINAPI FindAndHookPresent(LPVOID)
{
    WNDCLASSEX wc = { sizeof(wc), CS_CLASSDC, DefWindowProc,0,0,GetModuleHandle(NULL),NULL,NULL,NULL,NULL, L"dummy", NULL };
    RegisterClassEx(&wc);
    HWND hwnd = CreateWindowW(wc.lpszClassName, L"dummy", WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, 0, 0, wc.hInstance, 0);

    D3D_FEATURE_LEVEL lvl;
    IDXGISwapChain* pSwap = nullptr;
    ID3D11Device* pDev = nullptr;
    ID3D11DeviceContext* pCtx = nullptr;
    DXGI_SWAP_CHAIN_DESC scd = {};
    scd.BufferCount = 1; scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    scd.OutputWindow = hwnd; scd.SampleDesc.Count = 1; scd.Windowed = TRUE; scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;

    if (SUCCEEDED(D3D11CreateDeviceAndSwapChain(
        nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr, 0, D3D11_SDK_VERSION,
        &scd, &pSwap, &pDev, &lvl, &pCtx)))
    {
        void** vtbl = *reinterpret_cast<void***>(pSwap);
        MH_Initialize();
        MH_CreateHook(vtbl[8], &hkPresent, reinterpret_cast<void**>(&oPresent));
        MH_EnableHook(vtbl[8]);
        pSwap->Release(); pDev->Release(); pCtx->Release();
    }
    DestroyWindow(hwnd);
    UnregisterClass(wc.lpszClassName, wc.hInstance);
    return 0;
}

void overlay_start_hook(){

    CreateThread(0, 0, FindAndHookPresent, 0, 0, 0);

}

ESP.cpp
C++:
Expand Collapse Copy
#include <Windows.h>
#include "hook.hpp"

BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);
        overlay_start_hook();
    }
    return TRUE;
}

hook.hpp
C++:
Expand Collapse Copy
#pragma once
void overlay_start_hook();

---

Дерево файлов:
1750194132684.png

Доп. каталоги включаемых файлов: $(ProjectDir)external\imgui;$(ProjectDir)external\imgui\backends;$(ProjectDir)external\minhook\include;$(ProjectDir)external\minhook\src;$(ProjectDir)external\minhook\src\hde;

Использую C++20

---

Еще что-то, может пригодится
1750194369809.png

1750194479084.png

1750194502558.png

1750194536673.png

Вопрос в том, почему вроде все правильно, а вроде ничего не работает, может я что-то не понимаю или не досмотрел? Надеюсь на вашу помощь:roflanPominki:
 
Линкер не нашел реализацию твоей функции
 
Линкер не нашел реализацию твоей функции
C++:
Expand Collapse Copy
void overlay_start_hook(){
    CreateThread(0, 0, FindAndHookPresent, 0, 0, 0);
}
Вот реализация функции, разве такой недостаточно? Можно тогда пожалуйста поподробнее, как убрать бар?
 
C++:
Expand Collapse Copy
void overlay_start_hook(){
    CreateThread(0, 0, FindAndHookPresent, 0, 0, 0);
}
Вот реализация функции, разве такой недостаточно? Можно тогда пожалуйста поподробнее, как убрать бар?
ПКМ по hook.cpp -> Исключить из проекта, ПКМ по hook.cpp -> Включить в проект
 
возможно это: в hook.cpp у тебя подключен
#include "hook.h"
а нужно #include "hook.hpp"
Всеравно не работает(

C++:
Expand Collapse Copy
#include <Windows.h>
#include <d3d11.h>
#include <dxgi.h>
#include "MinHook.h"
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#include "hook.hpp"

#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "dxgi.lib")

---

Перестроение начато в 15:29...
1>------ Перестроение всех файлов начато: проект: ESP, Конфигурация: Debug x64 ------
1>ESP.cpp
1>imgui_impl_dx11.cpp
1>imgui_impl_win32.cpp
1>imgui.cpp
1>imgui_demo.cpp
1>imgui_draw.cpp
1>imgui_tables.cpp
1>imgui_widgets.cpp
1>hook.cpp
1>Создание кода...
1>buffer.c
1>hde32.c
1>hde64.c
1>hook.c
1>trampoline.c
1>Создание кода...
1>x64\Debug\hook.obj : warning LNK4042: объект указан более одного раза; лишние не учитываются
1>ESP.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl overlay_start_hook(void)" (?overlay_start_hook@@YAXXZ) в функции DllMain.
1>C:\Users\Alex\Desktop\ESP\34\x64\Debug\ESP.dll : fatal error LNK1120: неразрешенных внешних элементов: 1
1>Сборка проекта "ESP.vcxproj" завершена с ошибкой.
========== Перестроить все: успешно — 0, неудачно — 1, пропущено — 0 ==========
========== Перестроить завершено в 15:29 и заняло 03,891 с ==========
1750250132924.png

1750250188775.png
 
Последнее редактирование:

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.


Да все нормально я уже переписал под опенгл, правда экран не хукаетсч, но тот баг уже исправил так сказать, но всеравно спасибо за помощь
 
шедевро постинг
 
Назад
Сверху Снизу