2011-08-08 2 views
0

COM 서버가 있습니다. 내가 다른 측면에서 문제의 경우이 같은 역동적 인 스타일의 메소드를 호출하면 나는 전체 예외가InteropAssembly COM의 COMException

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

강력한 형식의 코드 변형으로 전체 예외가 발생합니까?

답변

2

DISP_E_EXCEPTION은 일반적으로 런타임에 COM 서버를 사용할 때만 생성되는 COM 오류입니다. 당신이 첫 번째 스 니펫에서했던 것처럼. 초기 바인딩 버전에 나타나는 것이 이상하지만 COM 서버 자체가 다른 종류의 COM 서버에서 런타임에 바인딩을 사용하고 오류 코드를 전달하는 경우 기술적으로 가능합니다. 그러나 CLR interop 계층은 이제 쉽게 IDispatch :: Invoke()에서 EXCEPINFO를 가져 오지 않습니다. COM 서버가 IErrorInfo를 적절하게 구현하지 않는 한 그렇게 보이지 않습니다.

당신은 그것에 대해 할 수있는 일이 많지 않습니다. 작성자는 후기 바인딩 호출 만 잘 지원하는 것 같습니다. 지원을 요청하거나 늦은 시간대로 넘어가십시오.

+0

고마워요! 좋은 대답. 나는 COM 서버 측에서 IErrorInfo를 구현하는 것이 좋은 해결책이라고 생각한다. – Grigory

관련 문제