# \[FR\] VST3PluginFormat::loadFromVstPresetFile()

**URL:** <https://forum.juce.com/t/fr-vst3pluginformat-loadfromvstpresetfile/24881>\
**Category:** Audio Plugins\
**Created:** [October 30, 2017, 8:18am UTC](https://forum.juce.com/t/fr-vst3pluginformat-loadfromvstpresetfile/24881 "2017-10-30T08:18:16Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![fr810](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/fr810/32/841_2.png) [@fr810](https://forum.juce.com/u/fr810)\
**Post date:** [November 2, 2017, 11:48am UTC](https://forum.juce.com/t/fr-vst3pluginformat-loadfromvstpresetfile/24881/7 "2017-11-02T11:48:02Z")

</div>

JUCE’s `AudioProcessor` interface just doesn’t really fit very well to the underlying state management of VST3. However, by using JUCE’s `AudioProcessor::getPlatformSpecificData` you can invoke the VST3’s `setState` method directly:

```
#include <pluginterfaces/vst/ivstcomponent.h>
#include <public.sdk/source/common/memorystream.h>

void setVST3PluginStateDirect (AudioPluginInstance* instance, const MemoryBlock& rawData)
{
    auto funknown = static_cast<Steinberg::FUnknown*> (instance->getPlatformSpecificData());
    Steinberg::Vst::IComponent* vstcomponent = nullptr;
    
    if (funknown->queryInterface (Steinberg::Vst::IComponent_iid, (void**) &vstcomponent) == 0
        && vstcomponent != nullptr)
    {
        
        auto* memoryStream = new Steinberg::MemoryStream (rawData.getData(), (int) rawData.getSize());
        vstcomponent->setState (memoryStream);
        memoryStream->release();
        vstcomponent->release();
    }
}

```

Would that work for you?

---

_[View the full topic](https://forum.juce.com/t/fr-vst3pluginformat-loadfromvstpresetfile/24881)._
