2014-01-22 2 views
1

VB2010 및 ArcObjects. 이 일을하는 방법을 상기시키는 문제가 있습니다. 객체 유형을 테스트 한 다음 적절한 유형 인 경우 무언가를 수행 할 수 있습니다. 그 외 모든 것은 지원되지 않는 유형의 메시지를 표시하려고합니다. 그래서 나는이 : 지원되지 않는 경우오브젝트 유형 리터럴 설명

Dim pRasRenderer As IRasterRenderer 
pRasRenderer = pRasterLayer.Renderer 
If TypeOf pRasRenderer Is IRasterClassifyColorRampRenderer Then 
    'process the layer 
Else 
    Debug.Print "Type not supported: " & pRasRenderer.ToString 
End If 

가 인쇄 문이

 "Type not supported: IRasterStretchColorRampRenderer" 

또는 내가 처리하지 않는 다른 유형을 읽어야합니다. 하지만 내가 돌아 오면

 "Type not supported: System.__ComObject" 

나는 GetType() 및 TypeName을 시도했다. 내가 이것을 할 수 있는지 없는지를 그냥 잊어 버려라.

답변

0

COM의 경우 유형은 IRasterStretchColorRampRenderer이 아니며 일부 COM 유형 (대개는 다른 인터페이스가 상당히 다를 수 있음)입니다. .NET에서 작업 할 때 객체의 "유형"에 직접 액세스하려고하면 언제든지 __ComObject이 표시됩니다.

예를 들어 IRasterStretchColorRampRenderer을 구현하는 개체의 실제 "유형"은 COM CoClass의 네이티브 구현 일 가능성이 높습니다. 따라서 .NET 코드에서 "관리되는"형식 이름을 가져올 수 없습니다.

불행하게도 이것은 전달 된 유형이 이 아니고보고 된 것일 가능성이 높다는 것을 의미합니다.이 메소드에 전달 된 실제 유형을보고하려고하지 않습니다. 이것은 아마도 다음과 같을 것입니다 :

Debug.Print "Type not supported: Current layer is not using a Classify Color Ramp Renderer" 
+0

나는 그것을보기 시작했습니다. 정의는 http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriCarto/IRasterRenderer.htm에 다른 coclass를 명시한 것입니다. 나는 단지 일반적인 메시지를 넣을 것이다. – sinDizzy

+0

@sinDizzy 예 - 유일한 옵션은 개별 유형을 확인하는 것입니다. 이는 매우 고통 스러울 것입니다. –

관련 문제