如何将 'System.__ComObject' 类型的 COM 对象转换为 vb.net 中的接口类型 'ESRI.ArcGIS.Carto.FeatureLayer'?

How to cast COM object of type 'System.__ComObject' to interface type 'ESRI.ArcGIS.Carto.FeatureLayer' in vb.net?

私有函数 GetRaster(ByRef sLayerLocation As String) As ESRI.ArcGIS.Carto.FeatureLayer

    Dim fso As New Scripting.FileSystemObject
    Dim sFolder As String
    Dim sFile As String
    Dim pWsFact As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory
    Dim pRasterWs As ESRI.ArcGIS.Geodatabase.IRasterWorkspace2

    Dim pRasterDataset As ESRI.ArcGIS.Geodatabase.IRasterDataset
    Dim pRaster As ESRI.ArcGIS.Geodatabase.IRaster
    Dim pRasterLayer As ESRI.ArcGIS.Carto.IRasterLayer




    sFolder = fso.GetParentFolderName(sLayerLocation)
    sFile = fso.GetFileName(sLayerLocation)
    Try
        'Open the workspace
        pWsFact = New ESRI.ArcGIS.DataSourcesRaster.RasterWorkspaceFactory
        pRasterWs = pWsFact.OpenFromFile(sFolder, 0)

        'Open the raster dataset
        pRasterDataset = pRasterWs.OpenRasterDataset(sFile)
        pRasterLayer = New ESRI.ArcGIS.Carto.RasterLayer

        pRasterLayer.CreateFromDataset(pRasterDataset)
        pRaster = pRasterLayer.Raster
        **GetRaster = pRaster;** 

    Catch ex As Exception

    End Try

在上面的代码片段中,当试图将 pRaster 分配给 GetRaster 时,代码语句抛出异常 "Unable to cast COM object of type 'System.__ComObject' to interface type 'ESRI.ArcGIS.Carto.FeatureLayer"。我也尝试过铸造,但那也不起作用。任何帮助将不胜感激。

栅格图层不实现 IFeatureLayer 接口。我认为除了栅格目录层。 你的函数应该 return IRasterLayer 或 IRaster.