Setting up global plugin structs



  • Hi folks,

    I've had a persistent issue with setting up some plugins with global structs. I'm sure I've read about this previously, maybe something to do with symbols not being loaded before PluginStart() is called? I forget the details...

    Anyhow, is there a 'correct' way to setup a global struct for my plugin, that has BaseContainers, Strings etc in it? Take this for example, if I do this:

    // global struct
    struct MyStruct
    {
        BaseContainer bc;
    }mystruct;
    

    the plugin fails to start and I get a crash file with nothing in it. If I do this:

    // global struct
    struct MyStruct
    {
        std::vector< BaseContainer > bc;
    }mystruct;
    

    then the plugin loads. Obviously I have to take care of the array, but that aside. Is there a way of having a global struct load with Cinema objects, without cheating it like this? Or - is there a better cheat...

    WP.



  • hi,

    after you struct declaration, you are adding mystruct witch will create a variable of the type of your structure.
    It try to allocate a BaseContainer that is unknown.

    If you add that to a Vector, as the vector is empty, it doesn't try to allocate a BaseContainer.

    I'm not sure why you need a global structure, but I would create a pointer and in pluginstart and pluginend take care of assign memory and free it.

    // global struct
    struct MyStruct
    {
        BaseContainer bc;
    }
    MyStruct *g_mystruct = nullptr;
    

    You can have a look at Entity Creation in our documentation.

    Cheers,
    Manuel



  • Hi Manuel,

    what you say rings a bell. I was sure it was because the vector hadn't allocated anything yet.

    Global possibly wasn't the best way admittedly, it just started like that for convenience. But it ended up being a bit complex, there's a lot of things accessing it, so I didn't want to change it (for now).

    @m_magalhaes said in Setting up global plugin structs:

    create a pointer and in pluginstart and pluginend take care of assign memory and free it

    hadn't thought of that. Seems to work - I'll go with that! Thanks 👍

    WP.