From 4da46d87c8b0b03929c09ba8451ecaf657ea4901 Mon Sep 17 00:00:00 2001 From: locpham Date: Tue, 1 Sep 2026 22:26:40 +0700 Subject: [PATCH] =?UTF-8?q?fix(bridge):=20skip=20to=C3=A0n=20b=E1=BB=99=20?= =?UTF-8?q?iZotope=20trong=20scan=20+=20VST2=20load=20=E2=80=94=20wrapper?= =?UTF-8?q?=200x7E/FastFail=20h=E1=BA=BFt=20dialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- native_bridge/src/RenderFxJob.cpp | 23 ++++++++++++++++------- native_bridge/src/Vst2Instrument.cpp | 11 ++++++++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/native_bridge/src/RenderFxJob.cpp b/native_bridge/src/RenderFxJob.cpp index 7c98cf8..cf74bed 100644 --- a/native_bridge/src/RenderFxJob.cpp +++ b/native_bridge/src/RenderFxJob.cpp @@ -2094,16 +2094,15 @@ int run_scan_dir(const std::string& dirPath) { #ifdef HAVE_VST3SDK for (const auto& p : vst3Paths) { std::vector entries; - // Ozone 11 / Ozone Pro (iZotope) tự __fastfail (c0000409, license/ - // anti-tamper) khi load trong --scan — không bị SEH chặn → chết cả - // process → mất TOÀN BỘ dir → FX list rỗng. Không load: emit UNKNOWN - // (giống skip module lỗi). ponytail: SandboxVst3Host (mỗi module 1 - // process). + // iZotope VST3 (Ozone 11/Pro, Neutron, RX, Nectar...) — wrapper cần + // companion core riêng, tự __fastfail (c0000409) hoặc MessageBox + // "Fatal Error 0x7E" khi load → không bị SEH chặn → chết cả process → + // mất TOÀN BỘ dir → FX list rỗng. Không load: emit UNKNOWN (giống skip + // module lỗi). ponytail: SandboxVst3Host (mỗi module 1 process). { std::string low = p; for (auto& c : low) c = (char)std::tolower((unsigned char)c); - if (low.find("ozone 11") != std::string::npos || - low.find("ozone pro") != std::string::npos) { + if (low.find("izotope") != std::string::npos) { emit(p, p.substr(p.find_last_of("/\\") + 1), false, false, "VST3"); continue; } @@ -2126,6 +2125,16 @@ int run_scan_dir(const std::string& dirPath) { } #endif for (const auto& p : vst2Paths) { + // iZotope VST2 wrapper DLL (iZOzonePro.dll, iZTonalBalanceControlPro.dll, + // iZNeutronPro.dll...) LoadLibrary companion core theo cơ chế riêng, + // không theo PATH → iZotope SDK tự hiện MessageBox "Fatal Error 0x7E" + // khi scan/load. Cũng là wrapper trùng VST3 cùng tên → bỏ qua hoàn + // toàn (user dùng bản VST3). + { + std::string low = p; + for (auto& c : low) c = (char)std::tolower((unsigned char)c); + if (low.find("izotope") != std::string::npos) continue; + } std::string name = p.substr(p.find_last_of("/\\") + 1); emit(p, name, false, true, "VST2"); } diff --git a/native_bridge/src/Vst2Instrument.cpp b/native_bridge/src/Vst2Instrument.cpp index cf7d6a7..fc13a42 100644 --- a/native_bridge/src/Vst2Instrument.cpp +++ b/native_bridge/src/Vst2Instrument.cpp @@ -306,7 +306,16 @@ bool Vst2Instrument::loadPlugin(const std::string& path, double sampleRate) { // iZotope VST2 wrapper DLL (iZOzonePro.dll...) LoadLibrary companion core // DLL (iZOzone11Core.dll) ở C:\Program Files\iZotope\\Cores — // không cạnh wrapper → iZotope SDK tự hiện MessageBox "Fatal Error 0x7E". - // Append Cores dirs vào PATH trước khi LoadLibraryA. + // vstAddDllSearchPath chỉ giúp loader search PATH; iZotope wrapper dùng cơ + // chế riêng → vẫn dialog. Bỏ qua hoàn toàn (wrapper trùng VST3 cùng tên). + { + std::string low = path; + for (auto& c : low) c = (char)std::tolower((unsigned char)c); + if (low.find("izotope") != std::string::npos) { + std::cerr << "[Vst2Instrument] skip (iZotope wrapper): " << path << std::endl; + return false; + } + } vstAddDllSearchPath(vstDllSearchExtras()); HMODULE h = LoadLibraryA(path.c_str()); if (!h) {