Вам нужно загрузить и инициализировать CLR.Да, способ сделать управляемый класс [ComVisible] или самостоятельно разместить CLR с помощью CorBindToRuntimeEx () - это способ сделать это.Очень простой способ - экспортировать управляемую функцию из вашей DLL, компилятор C ++ / CLI вставляет в код thunk, который заботится об инициализации CLR.Это очень легко сделать, но он плохо масштабируется, когда интерфейс вашего управляемого кода толстый.
ref class Bootstrap
{
public:
static void Initialize() {
// etc..
}
};
extern "C" __declspec(dllexport)
void __stdcall LoadAndInitialize()
{
Bootstrap::Initialize();
}
Вы можете приукрасить, передав указатель функции на ваш собственный интерфейс.Преобразуйте его в управляемый делегат с помощью Marshal :: GetDelegateForFunctionPointer ().Если вы сделаете это, не забудьте обернуть любые нативные объявления в управляемый #pragma.