Загрузка сборки смешанного режима из неуправляемого кода - PullRequest
3 голосов
/ 24 мая 2011

Как видно из заголовка, я хочу вызвать сборку смешанного режима из неуправляемого кода.

Точнее говоря, я хочу динамически загрузить сборку смешанного режима и затем выполнить статический неуправляемый код запуска, который регистрирует некоторыеУправляемые оболочки C ++ для кода C #.

Возможно ли это (или мне нужно встроить .Net Runtime или использовать COM?)?

Кто-нибудь уже сделал это и может поделиться своим опытом?

PS: Если сборка смешанного режима содержит окно WPF, оно будет запущено?

1 Ответ

2 голосов
/ 24 мая 2011

Вам нужно загрузить и инициализировать 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.

...