从非托管代码加载混合模式程序集

| 如标题所述,我想从非托管代码中调用混合模式程序集。 更准确地说,我想动态地加载混合模式程序集,然后执行一些静态的非托管启动代码,该代码为C#代码注册了一些托管C ++包装程序。 这可能吗(或者我需要嵌入.Net运行时或使用COM?)? 是否有人已经这样做并可以分享一些经验? PS:如果混合模式程序集包含WPF窗口,它将启动吗?     
已邀请:
您需要加载并初始化CLR。是的,制作托管类[ComVisible]或使用CorBindToRuntimeEx()自己托管CLR是实现此目的的一种方法。一种非常简单的方法是从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受管理的方式包装任何本机声明。     

要回复问题请先登录注册