fix vst3 factoryCreateInstance
This commit is contained in:
parent
b8469d8b86
commit
41c0b3e704
@ -265,7 +265,7 @@ static int stateRead(struct Steinberg_IBStream * state, char ** data, Steinberg_
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef struct pluginInstance {
|
typedef struct pluginInstance {
|
||||||
Steinberg_Vst_IComponentVtbl * vtblIComponent;
|
Steinberg_Vst_IComponentVtbl * vtblIComponent; // must stay first
|
||||||
Steinberg_Vst_IAudioProcessorVtbl * vtblIAudioProcessor;
|
Steinberg_Vst_IAudioProcessorVtbl * vtblIAudioProcessor;
|
||||||
Steinberg_Vst_IProcessContextRequirementsVtbl * vtblIProcessContextRequirements;
|
Steinberg_Vst_IProcessContextRequirementsVtbl * vtblIProcessContextRequirements;
|
||||||
Steinberg_uint32 refs;
|
Steinberg_uint32 refs;
|
||||||
@ -1149,7 +1149,7 @@ static Steinberg_Vst_IProcessContextRequirementsVtbl pluginVtblIProcessContextRe
|
|||||||
typedef struct plugView plugView;
|
typedef struct plugView plugView;
|
||||||
|
|
||||||
typedef struct controller {
|
typedef struct controller {
|
||||||
Steinberg_Vst_IEditControllerVtbl * vtblIEditController;
|
Steinberg_Vst_IEditControllerVtbl * vtblIEditController; // must stay first
|
||||||
Steinberg_Vst_IMidiMappingVtbl * vtblIMidiMapping;
|
Steinberg_Vst_IMidiMappingVtbl * vtblIMidiMapping;
|
||||||
#ifdef DATA_UI
|
#ifdef DATA_UI
|
||||||
//Steinberg_Vst_IConnectionPointVtbl * vtblIConnectionPoint;
|
//Steinberg_Vst_IConnectionPointVtbl * vtblIConnectionPoint;
|
||||||
@ -2419,25 +2419,10 @@ static Steinberg_tresult factoryCreateInstance(void *thisInterface, Steinberg_FI
|
|||||||
TRACE("createInstance\n");
|
TRACE("createInstance\n");
|
||||||
if (memcmp(cid, dataPluginCID, sizeof(Steinberg_TUID)) == 0) {
|
if (memcmp(cid, dataPluginCID, sizeof(Steinberg_TUID)) == 0) {
|
||||||
TRACE(" plugin\n");
|
TRACE(" plugin\n");
|
||||||
size_t offset; // does it actually work like this? or is offset always 0? this seems to be correct and works...
|
if (memcmp(iid, Steinberg_FUnknown_iid, sizeof(Steinberg_TUID))
|
||||||
if ((memcmp(iid, Steinberg_FUnknown_iid, sizeof(Steinberg_TUID)) == 0)
|
&& memcmp(iid, Steinberg_IPluginBase_iid, sizeof(Steinberg_TUID))
|
||||||
|| (memcmp(iid, Steinberg_IPluginBase_iid, sizeof(Steinberg_TUID)) != 0)
|
&& memcmp(iid, Steinberg_Vst_IComponent_iid, sizeof(Steinberg_TUID)))
|
||||||
|| (memcmp(iid, Steinberg_Vst_IComponent_iid, sizeof(Steinberg_TUID)) != 0)) {
|
|
||||||
TRACE(" IComponent\n");
|
|
||||||
offset = offsetof(pluginInstance, vtblIComponent);
|
|
||||||
} else if (memcmp(iid, Steinberg_Vst_IAudioProcessor_iid, sizeof(Steinberg_TUID)) != 0) {
|
|
||||||
TRACE(" IAudioProcessor\n");
|
|
||||||
offset = offsetof(pluginInstance, vtblIAudioProcessor);
|
|
||||||
} else if (memcmp(iid, Steinberg_Vst_IProcessContextRequirements_iid, sizeof(Steinberg_TUID)) != 0) {
|
|
||||||
TRACE(" IProcessContextRequirements\n");
|
|
||||||
offset = offsetof(pluginInstance, vtblIProcessContextRequirements);
|
|
||||||
} else {
|
|
||||||
TRACE(" INothing :(\n");
|
|
||||||
for (int i = 0; i < 16; i++)
|
|
||||||
TRACE(" %x", iid[i]);
|
|
||||||
TRACE("\n");
|
|
||||||
return Steinberg_kNoInterface;
|
return Steinberg_kNoInterface;
|
||||||
}
|
|
||||||
pluginInstance *p = malloc(sizeof(pluginInstance));
|
pluginInstance *p = malloc(sizeof(pluginInstance));
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return Steinberg_kOutOfMemory;
|
return Steinberg_kOutOfMemory;
|
||||||
@ -2446,7 +2431,7 @@ static Steinberg_tresult factoryCreateInstance(void *thisInterface, Steinberg_FI
|
|||||||
p->vtblIProcessContextRequirements = &pluginVtblIProcessContextRequirements;
|
p->vtblIProcessContextRequirements = &pluginVtblIProcessContextRequirements;
|
||||||
p->refs = 1;
|
p->refs = 1;
|
||||||
p->context = NULL;
|
p->context = NULL;
|
||||||
*obj = (void *)((char *)p + offset);
|
*obj = p;
|
||||||
TRACE(" instance: %p\n", (void *)p);
|
TRACE(" instance: %p\n", (void *)p);
|
||||||
} else if (memcmp(cid, dataControllerCID, sizeof(Steinberg_TUID)) == 0) {
|
} else if (memcmp(cid, dataControllerCID, sizeof(Steinberg_TUID)) == 0) {
|
||||||
TRACE(" controller\n");
|
TRACE(" controller\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user