5

Delphi と GDAL18 を使用してアイソラインを作成しようとしています。そのために、次のコードを使用しています。

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 コマンドは、「サポートされていないジオメトリ タイプです」というエラーを返します。

次の方法で 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 など) も試しましたが、これは役に立ちませんでした。何か提案があれば幸いです。どうもありがとう、マリオ

[編集] 「レイヤー」(GDALContourGenerate 内) を「nil」で再生すると、同じエラーが発生することがわかりました。したがって、問題は別の場所にある可能性があります。[/編集]

4

1 に答える 1

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;

または、stdcalldll のコンパイル方法に応じた単語。

また、文字列パラメーターについては、gdal は*charC フラット API でパラメーター AFAIK を使用するため、次のようにPAnsiChar直接使用できます。

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

Delphi 2009 より前ではpointer(aString)、このようなパラメータに を使用できました。Delphi 2009 以降では、値pointer(AnsiString(aString))を型キャストするためだけに使用できましたaString: string

.h ヘッダーをどのように変換しましたか?

于 2011-05-30T17:00:58.803 に答える