2

COM Interop として登録された C# Dll があります。

[Guid("B41C2229-DBBD-4614-AE28-BFAE82B10F20")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ITestCls
    {
        [DispId(1)]
        string test(string input);
    }

    [Guid("5E88B6B8-AE17-40A0-917A-51DEBD818145")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("TestNm.TestCls")]       
    public class TestCls : ITestCls
    {
        public string test(string input)
        {
            Console.WriteLine("INSIDE CS :: ");
            return "CS ::  ARE YOU TESTING WITH THIS INPUT " + input;        
        }
    }

C++ コードから同じものを呼び出そうとしました:

    CoInitialize(NULL); 
    std::cout << data << '\n'; 
    _bstr_t bstrt(data);
    BSTR  lResult;  
    CComQIPtr<IWPrint> iWrapClass;
    HRESULT hresult;
    hresult = iWrapClass.CoCreateInstance(L"TestNm.TestCls");
    printf("0x%08lx", hresult); 
    if (SUCCEEDED (hresult))
    {
        iWrapClass->test(bstrt,&lResult);
        wprintf(L"Response  %s\n", lResult);
    }
    CoUninitialize();
    return lResult;

他のマシンから同じものを実行すると、開発者のマシンからすべて正常に動作します HRESULT は私にこれを与えます:

 0x800401f3 

登録が不足していますか?

ありがとう

4

2 に答える 2

1

トラブルシューティングの際に試していただきたいことがいくつかあります。

  • マネージド アセンブリのターゲット CPU プラットフォームを x86 (32 ビット) に設定します。
  • アセンブリに厳密な名前があることを確認してください。
  • ターゲット マシンでは、32 ビット バージョンの RegAsm.exe ( C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exeC:\Windows\Microsoft.NET\Framework64\v4.0.30319ではありません) を使用します。 \RegAsm.exe )。
  • を使用してターゲット マシンに登録しますRegAsm.exe /codebase(そのためには厳密なアセンブリ名が必要です)。
于 2013-08-20T05:32:21.263 に答える
0

はい (regasm) それまたは perms のように見えます walkthru を参照してください

http://www.iis.net/learn/media/web-playlists/web-playlists-for-iis-extending-web-playlists-through-custom-providers

于 2013-07-16T10:06:46.677 に答える