2011-05-30 126 views
5

我正在嘗試使用Delphi和GDAL18創建等值線。對於我使用下面的代碼:使用GDAL和Delphi創建等高線

layer:= OGRCreateLayer(ogr_ds, PAnsiChar(WideStringToString('contour')), nil, ogr.wkbLineString, nil); 
err:= GDALContourGenerate(band, 1, 0, 0, aFixedLevel, 0, 0, layer, 0, 1, nil, nil); 

的GDALContourGenerate命令返回「Unnsupported幾何類型」 - 錯誤。

我包括gdal18.dll方式如下:

function GDALContourGenerate(srcBand: TGDALRasterBandH; contourInterval: double; 
         contourBase: double; fixedLevelCount: longint; fixedLevel: TDoubleArray2; 
         useNoData: longint; noDataValue: double; 
         layer: TOGRLayerH; idField: longint; elevField: longint; 
         pfnProgress: TGDALProgressFunc; pProgressArg : POINTER): TOGRErr; external External_Lib name 'GDALContourGenerate'; 

我也試過其他幾何類型(例如wkbLineString25D),但這並沒有幫助。 如果您有任何建議,我會很高興。 Thnaks很多, 馬里奧

[編輯]我發現,當我replaye與「無」「層」(在GDALContourGenerate)發生同樣的錯誤。所以,也許問題是在其他地方[/編輯]

回答

4

你也許應該補充cdecl外部聲明之後,因爲這樣的(名字在Delphi函數聲明相匹配,所以可以忽略不計)。

function GDALContourGenerate(srcBand: TGDALRasterBandH; contourInterval: double; 
         contourBase: double; fixedLevelCount: longint; fixedLevel: TDoubleArray2; 
         useNoData: longint; noDataValue: double; 
         layer: TOGRLayerH; idField: longint; elevField: longint; 
         pfnProgress: TGDALProgressFunc; pProgressArg : POINTER): TOGRErr; 
cdecl; external External_Lib; 

stdcall單詞取決於如何編譯dll。

而對於字符串參數,因爲@中其C平API中使用*char參數AFAIK,你可以直接使用PAnsiChar,因爲這樣的:

 layer:= OGRCreateLayer(ogr_ds, 'contour', nil, ogr.wkbLineString, nil); 

德爾福2009年之前,你可以使用pointer(aString)這樣的參數,並自德爾福2009年,只是一個pointer(AnsiString(aString))來typecast aString: string值。

你是如何convert the .h header

+1

非常感謝!我花了很長時間尋找問題,但我沒有看到我忘記了「cdecl」。現在一切正常! – 2011-05-30 19:41:47