Skip to content

Poco::ClassLoader will crashed when DLL and EXE not use MD/MDd RunTime-Library #4549

@siren186

Description

@siren186

Describe the bug
Poco::Manifest class has STL member, It will crash if DLL and EXE use different Run-Time Library (MT/MD)

To Reproduce
Build options: VS2019 + debug_static_mt + x64
( It must be in debug mode and not MD if you wanna see the crash message box)

EXE code

#include "DLLTest/AbstractPlugin.h"

int wmain(int argc, wchar_t** argv)
{
    Poco::ClassLoader<AbstractPlugin> loader;
    loader.loadLibrary("Test.dll");
    AbstractPlugin* pPluginA = loader.create("PluginA");
    AbstractPlugin* pPluginB = loader.create("PluginB");

    loader.classFor("PluginA").autoDelete(pPluginA);
    delete pPluginB;
    loader.unloadLibrary("Test.dll");
}

DLL code

class AbstractPlugin
{
public:
    virtual ~AbstractPlugin() {};
    virtual void foo() const = 0;
};

class PluginA : public AbstractPlugin
{
public:
    virtual void foo() const override
    {
    }
};

class PluginB : public AbstractPlugin
{
public:
    virtual void foo() const override
    {
    }
};

POCO_BEGIN_MANIFEST(AbstractPlugin)
POCO_EXPORT_CLASS(PluginA)
POCO_EXPORT_CLASS(PluginB)
POCO_END_MANIFEST

Screenshots
PocoCrash

Please add relevant environment information:

  • Windows 10
  • POCO-1.13.2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions