2011-08-17 4 views
1

RightFax COM API로 작업하고 있습니다. 내가하고 싶은 것은 단순히 첨부 파일이있는 팩스를 보내는 것입니다. 간단한 권리? 그 질문은 몇 번 대답되었습니다. 그러나 응용 프로그램에서 일부 코드를 사용할 때 약간의 문제가 있습니다.RFCOMAPIlib (RightFax COM API) 사용 : COM 개체를 캐스팅 할 수 없습니다.

응용 프로그램 : RightFax 9.4
언어 : C#을 (ASP.NET 응용 프로그램)
IDE : MS 비주얼 웹 데브.
대상 프레임 워크 익스프레스 : .NET 3.5
OS : 윈도우 7

using ... 
public static void SendFax(<arguments>) 
{ 
    RFCOMPAPILib.FaxServerClass fs = new RFCOMAPILib.FaxServerClass(); 
    fs.Name = "faxSvrName"; 
    // BOOM, exception 
} 

심지어 서버의 이름 번번이 않는합니다.

예외 정보 : 유형 'RFCOMAPILib.Form을'인터페이스 타입 'RFCOMAPILib.FaxServerClass를'COM 개체를 캐스팅 할 수 없습니다
. 다음 오류로 인해 IID '{9F386618-764B-48F8-A5BF-3682B03DE840}'인터페이스의 COM 구성 요소에서 QueryInterface 호출이 실패했기 때문에이 작업이 실패했습니다. 해당 인터페이스가 지원되지 않습니다 (HRESULT : 0x80004002 (E_NOINTERFACE 예외)). .

그래서. 어떤 제안?

답변

1

이 COM 인터페이스는 조금 지나치게 디자인되었지만 패턴은 특이하지 않습니다. COM coclass는 여러 개의 인터페이스를 구현할 수 있으며 그 중 하나는 기본 인터페이스입니다. 이 메커니즘은 .NET에는 존재하지 않지만 다중 상속 또는 기본 인터페이스 개념을 지원하지 않습니다. Tlbimp는 mumbleClass라는 이름의 가짜 래퍼 클래스를 합성하여 mumble이라는 coclass를 래핑합니다. 모든 인터페이스에 의해 구현 된 모든 메소드의 백입니다. 예외 메시지가 말하는 것은 FaxServer coclass의 기본 인터페이스 이름이 "Form"입니다. 그리고 해당 RFCOMAPILib.Form RFCOMAPILib.FaxServerClass 위해 캐스팅 할 수 없습니다. 놀라운 일이 아닙니다.

RFCOMPAPILib.FaxServer fs = new RFCOMAPILib.FaxServerClass(); 
fs.Name = "faxSvrName"; 

내가 완전히 인터페이스 이름에서 추측하고있어, "IFaxServer"에 대한 몇 가지 가능성 :

는이를 닮은 뭔가 코드를 다시 작성해야합니다. 개체 브라우저를 사용하여 실제 이름을 찾습니다.

+0

인터페이스 이름의 정확한 추측. 나는 그것을 시험하고 결과로 내일 다시 돌아올 것이다. 고맙습니다. – Erik

+0

그게 효과가있다. 그래도 여전히 보내지 않을 것입니다 : P 이제이 오류를 막을 필요가 있습니다. 아마 프로그램보다 서버와 더 관련이 있습니다. 도와 줘서 고마워! – Erik

관련 문제