C ++将DLL加载到默认的AppDomain中

| 利用我不存在的C ++知识(嘿,至少我知道一个指针是:P),我设法将一些代码示例放在一起以创建一个将DLL文件注入另一个程序的解决方案。 不幸的是,我正在注入的DLL无法正常工作:它成功显示了消息框(因此我知道DLL正在运行),但实际上并没有创建指定类型的实例(来自托管DLL,该DLL具有类型为Injectee的静态构造函数,该静态构造函数可写入文件)。那么,有人可以帮助我解决我的问题吗? (N.B.托管DLL是相同的.Net版本,并已安装到GAC。在与我要插入的应用程序相同的文件夹中也有一个副本) 这是非托管的注入者(应该加载托管的DLL):
#include \"stdafx.h\"

#include \"Injectee.h\"

#include \"stdafx.h\"
#include <stdio.h>
#include \"objbase.h\"
#include \"MSCorEE.h\"
#import \"C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.tlb\" raw_interfaces_only
using namespace mscorlib;

void Bootstrap() {
    CoInitializeEx(0, COINIT_MULTITHREADED );
    ICorRuntimeHost* pICorRuntimeHost = 0;
    HRESULT st = CoCreateInstance(CLSID_CorRuntimeHost, 0, CLSCTX_ALL,
        IID_ICorRuntimeHost, (void**)&pICorRuntimeHost);
    if(!pICorRuntimeHost) {
        MessageBox(NULL, TEXT(\"Failed at stage 1.\"), TEXT(\"Error\"), MB_OK); 
    }

    HDOMAINENUM hEnum = NULL;
    pICorRuntimeHost->EnumDomains(&hEnum);

    if(!hEnum) {
        MessageBox(NULL, TEXT(\"Failed at stage 2.\"), TEXT(\"Error\"), MB_OK); 
    }

    IUnknown* pUunk = 0;
    st = pICorRuntimeHost->NextDomain(hEnum, &pUunk);
    if(!pUunk) {
        MessageBox(NULL, TEXT(\"Failed at stage 3.\"), TEXT(\"Error\"), MB_OK); 
    }

    _AppDomain * pCurDomain = NULL;
    st = pUunk->QueryInterface(__uuidof(_AppDomain), (VOID**)&pCurDomain);
    if(!pCurDomain) {
        MessageBox(NULL, TEXT(\"Failed at stage 4.\"), TEXT(\"Error\"), MB_OK); 
    }

    _bstr_t assemblyName = \"ZAI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9db2aaea0fceabbb\";
    _bstr_t typeName = \"Injectee\";

    _ObjectHandle* pObjectHandle = 0;

    MessageBox(NULL, TEXT(\"Loading DLL.\"), TEXT(\"Error\"), MB_OK); 

    pCurDomain->CreateInstance(assemblyName, typeName, &pObjectHandle);
}
有什么帮助吗? (请注意,托管程序集是针对两种体系结构构建的(目标应用程序是x64),具有基本名称空间ZAI)) 任何建议表示赞赏。 (如果您想知道,我正在尝试将API添加到免费的封闭源.Net应用程序中)     
已邀请:
        我想象创建一个新的“ 1”实例会创建一个新的AppDomain。 我建议编写一个混合模式的C ++ / CLI DLL并将其注入。 如果您确定确实获得了对正确的AppDomain的引用,请在
CreateInstance
之前调用
AppDomain::Load
。或什至是point4ѭ,如果您将装配的入口点设置为执行有用的操作。     

要回复问题请先登录注册