diff --git a/src/common/serialization/vst3/component.h b/src/common/serialization/vst3/component.h index 1066b577..6068aaca 100644 --- a/src/common/serialization/vst3/component.h +++ b/src/common/serialization/vst3/component.h @@ -128,7 +128,7 @@ class YaComponent : public Steinberg::Vst::IComponent { virtual tresult PLUGIN_API initialize(FUnknown* context) override = 0; /** - * Message to pass through a call to `IComponent::terminate()` to the Wine + * Message to pass through a call to `IPluginBase::terminate()` to the Wine * plugin host. */ struct Terminate { diff --git a/src/plugin/bridges/vst3-impls/component.cpp b/src/plugin/bridges/vst3-impls/component.cpp index 4978b9b5..bf209c44 100644 --- a/src/plugin/bridges/vst3-impls/component.cpp +++ b/src/plugin/bridges/vst3-impls/component.cpp @@ -35,6 +35,28 @@ YaComponentPluginImpl::queryInterface(const ::Steinberg::TUID _iid, } tresult PLUGIN_API YaComponentPluginImpl::initialize(FUnknown* context) { + // This `context` will likely be an `IHostApplication`. If it is, we will + // store it here, and we'll proxy through all calls to it made from the Wine + // side. Otherwise we'll still call `IPluginBase::initialize()` but with a + // null pointer instead. + host_application_context = context; + if (host_application_context) { + // TODO: Init with `YaHostApplication` + } else { + context->iid; + + char iid_string[128] = ""; + if (context) { + context->iid.print(iid_string, + Steinberg::FUID::UIDPrintStyle::kCLASS_UID); + } + + bridge.logger.log("[Unknown interface] In IPluginBase::initialize(): " + + std::string(iid_string)); + + // TODO: Init with null pointer + } + // TODO: Implement return Steinberg::kNotImplemented; } diff --git a/src/plugin/bridges/vst3-impls/component.h b/src/plugin/bridges/vst3-impls/component.h index dddd1b88..2b53178f 100644 --- a/src/plugin/bridges/vst3-impls/component.h +++ b/src/plugin/bridges/vst3-impls/component.h @@ -16,6 +16,8 @@ #pragma once +#include + #include "../vst3.h" class YaComponentPluginImpl : public YaComponent { @@ -61,4 +63,11 @@ class YaComponentPluginImpl : public YaComponent { private: Vst3PluginBridge& bridge; + + /** + * An `IHostApplication` instance if we get one through + * `IPluginBase::initialize()`. + */ + Steinberg::FUnknownPtr + host_application_context; }; diff --git a/src/plugin/bridges/vst3-impls/plugin-factory.cpp b/src/plugin/bridges/vst3-impls/plugin-factory.cpp index 28c77be8..4e5c6095 100644 --- a/src/plugin/bridges/vst3-impls/plugin-factory.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-factory.cpp @@ -55,7 +55,9 @@ YaPluginFactoryPluginImpl::createInstance(Steinberg::FIDString cid, iid.print(iid_string, Steinberg::FUID::UIDPrintStyle::kCLASS_UID); } - bridge.logger.log("[Unknown interface] " + std::string(iid_string)); + bridge.logger.log( + "[Unknown interface] In IPluginFactory::createInstance(): " + + std::string(iid_string)); return Steinberg::kNotImplemented; }