mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-04-01 21:17:44 -05:00
build: Make ImHex fully compile with MSVC and Clang CL
This does NOT make ImHex work yet. However it can now be compiled
This commit is contained in:
@@ -10,4 +10,10 @@ add_dependencies(imhex_all main-forwarder)
|
||||
set_target_properties(main-forwarder PROPERTIES
|
||||
OUTPUT_NAME "imhex"
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../..
|
||||
)
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
if (MSVC)
|
||||
target_link_options(main-forwarder PRIVATE /MANIFEST:NO)
|
||||
endif()
|
||||
endif()
|
||||
@@ -61,6 +61,10 @@ target_compile_definitions(main PRIVATE IMHEX_PROJECT_NAME="${PROJECT_NAME}")
|
||||
target_link_libraries(main PRIVATE libromfs-imhex libimhex libwolv ${LIBBACKTRACE_LIBRARIES} LLVMDemangle)
|
||||
if (WIN32)
|
||||
target_link_libraries(main PRIVATE usp10 wsock32 ws2_32 Dwmapi.lib Winmm.lib)
|
||||
|
||||
if (MSVC)
|
||||
target_link_options(main PRIVATE /MANIFEST:NO /ENTRY:mainCRTStartup)
|
||||
endif()
|
||||
else ()
|
||||
target_link_libraries(main PRIVATE pthread)
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace hex::messaging {
|
||||
});
|
||||
|
||||
EventNativeMessageReceived::subscribe([](const std::vector<u8> &rawData) {
|
||||
ssize_t nullIndex = -1;
|
||||
i64 nullIndex = -1;
|
||||
|
||||
auto messageData = reinterpret_cast<const char*>(rawData.data());
|
||||
size_t messageSize = rawData.size();
|
||||
|
||||
@@ -47,12 +47,21 @@ namespace {
|
||||
ZeroMemory(&stackFrame, sizeof(STACKFRAME64));
|
||||
|
||||
image = IMAGE_FILE_MACHINE_AMD64;
|
||||
stackFrame.AddrPC.Offset = context.Rip;
|
||||
stackFrame.AddrPC.Mode = AddrModeFlat;
|
||||
stackFrame.AddrFrame.Offset = context.Rsp;
|
||||
stackFrame.AddrFrame.Mode = AddrModeFlat;
|
||||
stackFrame.AddrStack.Offset = context.Rsp;
|
||||
stackFrame.AddrStack.Mode = AddrModeFlat;
|
||||
#if defined(_X86_)
|
||||
stackFrame.AddrPC.Offset = context.Eip;
|
||||
stackFrame.AddrPC.Mode = AddrModeFlat;
|
||||
stackFrame.AddrFrame.Offset = context.Esp;
|
||||
stackFrame.AddrFrame.Mode = AddrModeFlat;
|
||||
stackFrame.AddrStack.Offset = context.Esp;
|
||||
stackFrame.AddrStack.Mode = AddrModeFlat;
|
||||
#else
|
||||
stackFrame.AddrPC.Offset = context.Rip;
|
||||
stackFrame.AddrPC.Mode = AddrModeFlat;
|
||||
stackFrame.AddrFrame.Offset = context.Rsp;
|
||||
stackFrame.AddrFrame.Mode = AddrModeFlat;
|
||||
stackFrame.AddrStack.Offset = context.Rsp;
|
||||
stackFrame.AddrStack.Mode = AddrModeFlat;
|
||||
#endif
|
||||
|
||||
while (true) {
|
||||
if (StackWalk64(
|
||||
|
||||
@@ -32,12 +32,22 @@
|
||||
#include <shellapi.h>
|
||||
#include <timeapi.h>
|
||||
#include <VersionHelpers.h>
|
||||
#include <cstdio>
|
||||
|
||||
#if !defined(STDIN_FILENO)
|
||||
#define STDIN_FILENO 0
|
||||
#endif
|
||||
|
||||
#if !defined(STDOUT_FILENO)
|
||||
#define STDOUT_FILENO 1
|
||||
#endif
|
||||
|
||||
#if !defined(STDERR_FILENO)
|
||||
#define STDERR_FILENO 2
|
||||
#endif
|
||||
|
||||
namespace hex {
|
||||
|
||||
template<typename T>
|
||||
using WinUniquePtr = std::unique_ptr<std::remove_pointer_t<T>, BOOL(*)(T)>;
|
||||
|
||||
static LONG_PTR s_oldWndProc;
|
||||
static float s_titleBarHeight;
|
||||
static Microsoft::WRL::ComPtr<ITaskbarList4> s_taskbarList;
|
||||
@@ -418,10 +428,10 @@ namespace hex {
|
||||
DropManager() = default;
|
||||
virtual ~DropManager() = default;
|
||||
|
||||
ULONG AddRef() override { return 1; }
|
||||
ULONG Release() override { return 0; }
|
||||
ULONG STDMETHODCALLTYPE AddRef() override { return 1; }
|
||||
ULONG STDMETHODCALLTYPE Release() override { return 0; }
|
||||
|
||||
HRESULT QueryInterface(REFIID riid, void **ppvObject) override {
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject) override {
|
||||
if (riid == IID_IDropTarget) {
|
||||
*ppvObject = this;
|
||||
|
||||
@@ -578,14 +588,14 @@ namespace hex {
|
||||
EventThemeChanged::subscribe([this]{
|
||||
auto hwnd = glfwGetWin32Window(m_window);
|
||||
|
||||
static auto user32Dll = WinUniquePtr<HMODULE>(LoadLibraryA("user32.dll"), FreeLibrary);
|
||||
static auto user32Dll = LoadLibraryA("user32.dll");
|
||||
if (user32Dll != nullptr) {
|
||||
using SetWindowCompositionAttributeFunc = BOOL(WINAPI*)(HWND, WINCOMPATTRDATA*);
|
||||
|
||||
const auto setWindowCompositionAttribute =
|
||||
reinterpret_cast<SetWindowCompositionAttributeFunc>(
|
||||
reinterpret_cast<void*>(
|
||||
GetProcAddress(user32Dll.get(), "SetWindowCompositionAttribute")
|
||||
GetProcAddress(user32Dll, "SetWindowCompositionAttribute")
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user