COMException в InteropAssembly COM - PullRequest
       10

COMException в InteropAssembly COM

0 голосов
/ 08 августа 2011

У меня есть COM-сервер. Если я вызываю его метод в динамическом стиле, как это, в случае какой-то проблемы с другой стороны, я получаю полное исключение

try
{
    Type factoryType = Type.GetTypeFromProgID("VPI.TcHost.TcAppFactory");

    dynamic factory = Activator.CreateInstance(factoryType);                
    dynamic appl = factory.CreateTcApp("Nga", "8.7");                                       
}
catch (COMException ex)
{
    //Here i get nice exception with _FULL_ description message
}

Когда я создаю InteropAssembly и вызываю его метод следующим образом, в случае возникновения проблем с другой стороны, я получаю короткую оболочку исключения

try
{
    CTcAppFactory appFactory = new CTcAppFactory();
    CNgaApp mApp = appFactory.CreateTcApp("Nga", "8.7");
}
catch (COMException ex)
{
    //Here i get short exception with hex code without Error string that was sent 
    //from COM server
}

Вот так выглядит короткое исключение. (Он не содержит описания проблемы, которую отправляет мой COM-сервер) Incorrect exception

Как получить полное исключение в строго типизированном варианте кода?

1 Ответ

2 голосов
/ 08 августа 2011

DISP_E_EXCEPTION - это ошибка COM, которая обычно возникает только при использовании COM-сервера с поздним связыванием.Как вы сделали в первом фрагменте.Странно, что оно появляется в ранней версии, но технически возможно, если сам COM-сервер использует позднюю привязку на каком-либо другом типе COM-сервера и просто передает код ошибки.Однако слой взаимодействия CLR теперь не будет легко получить EXCEPINFO из IDispatch :: Invoke ().Если COM-сервер должным образом не реализует IErrorInfo, похоже, что он этого не делает.

Мало что вы можете с этим поделать, очевидно, что автор явно поддерживает только поздние вызовы.Свяжитесь с ним для поддержки или вернитесь к поздним связям.

...