3

COM 相互運用機能を介して .NET コンポーネントを使用するネイティブ プロセスがあります。プロセスが起動したら、ICLRControl インターフェイス ポインターを使用して、ICLRDebugManager、ICLRGCManager などのさまざまな CLR マネージャーへのインターフェイス ポインターを取得しようとしています。問題なく ICLRControl インターフェイスを取得することができました。ICLRRuntimeInfo は、GetVersionString を呼び出すと、4.0.x .net バージョンであることも正しく示しています。

ICLRControl::GetCLRManager がエラー 0x80130122 で失敗し続けることだけです。このエラー コードは HOST_E_INVALIDOPERATION を表します。インターネットを検索しましたが、これが失敗する理由に関する情報を取得できませんでした。どんな助けでも大歓迎です。

ティア。

WinCPP

編集 1. コード スニペットの追加。

    // ICLRRuntimeInfo interface pointer
    CComQIPtr<ICLRRuntimeInfo> pCLRRuntimeInfo = pUnk;
    if (!pCLRRuntimeInfo)
    {
        cout << "failed to get run time info interface pointer" << endl;
        return;
    }

    TCHAR version[128];
    memset(version, 0, 128);
    DWORD count = 127;
    pCLRRuntimeInfo->GetVersionString(version, &count);
    cout << version << endl;

    // ICLRRuntimeHost
    CComPtr<ICLRRuntimeHost> pCLRRuntimeHost = 0;
    hr = pCLRRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID *)&pCLRRuntimeHost);
    if (FAILED(hr))
    {
        cout << "failed to get run time host interface pointer" << endl;
        return;
    }

    // ICLRControl
    CComPtr<ICLRControl> pCLRControl = 0;
    hr = pCLRRuntimeHost->GetCLRControl(&pCLRControl);
    if (FAILED(hr))
    {
        cout << "failed to get clr control interface pointer" << endl;
        return;
    }

    ///////////////////////////////////////////
    // Everything is successful upto this point
    ///////////////////////////////////////////

    // ICLRGCManager
    CComPtr<ICLRGCManager> pCLRGCManager = 0;
    hr = pCLRControl->GetCLRManager(IID_ICLRGCManager, (LPVOID *)&pCLRGCManager);
    if (FAILED(hr))
    {
        cout << "failed to get GC manager interface pointer" << endl;
        return;
    }

    // Above call fails with the error 0x81031022, though everything is as per the MSDN documentation for the API
4

1 に答える 1