class IBackend { public: virtual ~IBackend() = default; virtual void test() = 0; virtual void init() = 0; virtual void cleanup() = 0; }; extern "C" { __declspec(dllexport) IBackend* CreateBackend(); __declspec(dllexport) void ReleaseBackend(IBackend* backend); } typedef IBackend* (*CreateBackendFunc)(); typedef void (*ReleaseBackendFunc)(IBackend*); #pragma once