c # — 0x800401f3 Недопустимая строка класса для COMInterop Dll

У меня есть 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

Решение

Несколько вещей, которые можно попробовать при поиске неисправностей:

  • установите целевую платформу ЦП для вашей управляемой сборки на x86 (32-битную);
  • убедитесь, что сборка имеет сильное имя;
  • на целевой машине используйте 32-разрядную версию RegAsm.exe (C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm.exe, не C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe).
  • зарегистрируйте его на целевой машине с RegAsm.exe /codebase (для этого требуется строгое имя сборки).
1

Другие решения