0x800401f3 COMInterop Dll的无效类字符串

时间:2013-07-16 09:55:00

标签: c# c++ com com-interop

我有一个C#Dll注册为COM Interop:

[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 

我错过了一些注册吗?

由于

2 个答案:

答案 0 :(得分:1)

排除故障时要尝试的一些事项:

  • 将托管程序集的目标CPU平台设置为x86(32位);
  • 确保程序集具有strong name;
  • 在目标计算机上,使用32位版本的RegAsm.exe( C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm.exe 不< / strong> C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe )。
  • 使用RegAsm.exe /codebase在目标计算机上注册它(需要强大的程序集名称)。

答案 1 :(得分:0)