Дак само собой пытался так сделать. И над функцией, и перед условием - ошибки за неопределенный идентификатор. И прежде чем писать, смотрел такие же темы что @CleanLegend скинул. В mainloop'е чистого проекта даже пример есть с переменной init, так делать пытался - не вышло.блч засунь ее над функцией своей
bool activew = true;
{
Тут твоя херня что выше
}
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
init = true;
}
Боже...Дак само собой пытался так сделать. И над функцией, и перед условием - ошибки за неопределенный идентификатор. И прежде чем писать, смотрел такие же темы что @CleanLegend скинул. В mainloop'е чистого проекта даже пример есть с переменной init, так делать пытался - не вышло.
C++:static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded."); init = true; }
Правда думаешь, что я не понимаю? Прилагаю два скриншота. На первом код, на втором ошибка.Боже...
после include напиши bool activew = true;
хз как тебе ещё объяснить
Выше приложил скриншоты, тоже пробывал. Уже не знаю, в чем ошибка,Вынеси её перед мэином
(После загрузки директивов)
Скинь как ты директивы загрузил (порядок)
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "ImGUI\imgui.h"
#include "ImGUI\imgui_impl_dx9.h"
#include "ImGUI\imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
bool activew = true;
// И далее само собой остальной код, на скриншоте первом видно
Это после твоей первой строки поставьbool activew = true;C++:#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1 #include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "ImGUI\imgui.h" #include "ImGUI\imgui_impl_dx9.h" #include "ImGUI\imgui_impl_win32.h" #include <d3d9.h> #define DIRECTINPUT_VERSION 0x0800 #include <dinput.h> #include <tchar.h> extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" [code=cpp]#include "imgui.h" #include "imgui_impl_dx9.h" #include "imgui_impl_win32.h" #include <d3d9.h> #define DIRECTINPUT_VERSION 0x0800 #include <dinput.h> #include <tchar.h> extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// И далее само собой остальной код, на скриншоте первом видно[/code]
Это после твоей первой строки поставь
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
Поставил - проблема осталась. Если переменную объявлять перед mainloop, то выдает две ошибки о неопределенном идентификаторе, а если объявлять после директив, то выходит сразу 127 ошибок, среди них уже нет ошибок о неопределенном идентификаторе. Наверное, мне стоит приложить сюда весь код.Это после твоей первой строки поставь
C++:#include "imgui.h" #include "imgui_impl_dx9.h" #include "imgui_impl_win32.h" #include <d3d9.h> #define DIRECTINPUT_VERSION 0x0800 #include <dinput.h> #include <tchar.h> extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "ImGUI\imgui.h"
#include "ImGUI\imgui_impl_dx9.h"
#include "ImGUI\imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
bool activew = true;
SAMPFUNCS *SF = new SAMPFUNCS();
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if (activew)
{
ImGui::Begin("ImGui меню", &activew, ImVec2(305, 160), 0.8f, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoResize);
{
ImGui::Text("Hello world!");
}
ImGui::End();
}
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
SF->getRender()->EndRender();
}
return true;
}
HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
ImGui_ImplDX9_InvalidateDeviceObjects();
return true;
}
bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
return true;
}
void CALLBACK PluginFree()
{
ImGui_ImplDX9_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
}
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
SF->getGame()->registerGameDestructorCallback(PluginFree);
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset);
SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler);
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());
init = true;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Чем это поможет? Попробовал - проблема все та же, только с новым названием переменной.Если ты пихнешь ее над mainloop то никак не будет работать, потому что проверка на эту activew выше, смени нахуй названия переменных , в пизду
Не , просто у меня бывало такое уже как-то. Это было связано с тем , что имя переменной было такое как например какая-либо функция, ну сменил имя да и нормЧем это поможет? Попробовал - проблема все та же, только с новым названием переменной.
собери проект, у меня работаетПоставил - проблема осталась. Если переменную объявлять перед mainloop, то выдает две ошибки о неопределенном идентификаторе, а если объявлять после директив, то выходит сразу 127 ошибок, среди них уже нет ошибок о неопределенном идентификаторе. Наверное, мне стоит приложить сюда весь код.
C++:#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1 #include "ImGUI\imgui.h" #include "ImGUI\imgui_impl_dx9.h" #include "ImGUI\imgui_impl_win32.h" #include <d3d9.h> #define DIRECTINPUT_VERSION 0x0800 #include <dinput.h> #include <tchar.h> extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); #include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" bool activew = true; SAMPFUNCS *SF = new SAMPFUNCS(); bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { if (SUCCEEDED(SF->getRender()->BeginRender())) { ImGui_ImplDX9_NewFrame(); ImGui_ImplWin32_NewFrame(); ImGui::NewFrame(); if (activew) { ImGui::Begin("ImGui меню", &activew, ImVec2(305, 160), 0.8f, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoResize); { ImGui::Text("Hello world!"); } ImGui::End(); } ImGui::EndFrame(); ImGui::Render(); ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()); SF->getRender()->EndRender(); } return true; } HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters) { ImGui_ImplDX9_InvalidateDeviceObjects(); return true; } bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam) { ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam); return true; } void CALLBACK PluginFree() { ImGui_ImplDX9_Shutdown(); ImGui_ImplWin32_Shutdown(); ImGui::DestroyContext(); } void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded."); SF->getGame()->registerGameDestructorCallback(PluginFree); SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present); SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset); SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); (void)io; ImGui_ImplWin32_Init(GetActiveWindow()); ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice()); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { switch (dwReasonForCall) { case DLL_PROCESS_ATTACH: SF->initPlugin(mainloop, hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
У меня при таковом коде выбрасывает те самые 127 ошибок. Я попытался их прогуглить - вроде это связано с кривой подгрузкой imgui_impl_dx9.hсобери проект, у меня работает
Лично собрал руками за 3 минуты и все спокойно компилится - ImGui.zip(https://yadi.sk/d/E5okMbg4Icvu9A)У меня при таковом коде выбрасывает те самые 127 ошибок. Я попытался их прогуглить - вроде это связано с кривой подгрузкой imgui_impl_dx9.h
В папке проекта папка imgui, в обозревателе решений на скриншоте видно. ImGui брал отсюда: ocornut/imgui(https://github.com/ocornut/imgui)
Моментом в самой игре - такая шняга.Лично собрал руками за 3 минуты и все спокойно компилится - ImGui.zip(https://yadi.sk/d/E5okMbg4Icvu9A)