2013-07-16 29 views
2

我有一個C#DLL的註冊爲COM互操作:0x800401f3無效類字符串COMInterop的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 

我是否缺少一些註冊?

感謝

回答

0

有幾件事情來嘗試,同時故障排除:

  • 設置目標CPU平臺的託管程序集到x86(32位);
  • 確保組件有一個strong name;
  • 在目標機器上,使用RegAsm.exe的32位版本(C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ RegAsm.exeC:\ WINDOWS \微軟.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe)。
  • 使用RegAsm.exe /codebase在目標機器上註冊它(需要強大的程序集名稱)。