我正在尝试使用Delphi和GDAL18创建isolines.为此,我使用以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
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';
Run Code Online (Sandbox Code Playgroud)
我也尝试过其他几何类型(例如wkbLineString25D),但这没有用.如果你有任何建议,我会很高兴的.很多,马里奥
[编辑]我发现当我用"nil"重放"layer"(在GDALContourGenerate中)时会发生同样的错误.所以也许问题出在其他地方.[/ edit]
您可能应该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;
Run Code Online (Sandbox Code Playgroud)
或者这个stdcall词取决于 dll 的编译方式。
对于字符串参数,由于 gdal*char在其 C 平面 API 中使用参数 AFAIK,因此您可以PAnsiChar直接使用 a,如下所示:
layer:= OGRCreateLayer( ogr_ds, 'contour', nil, ogr.wkbLineString, nil);
Run Code Online (Sandbox Code Playgroud)
在 Delphi 2009 之前,您可以使用pointer(aString)此类参数,而自 Delphi 2009 以来,只需对值pointer(AnsiString(aString))进行类型转换aString: string。
您是如何转换 .h 标头的?
| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |