Trouble in converting C code to D
Jacob Carlborg via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Apr 12 02:44:08 PDT 2015
On 2015-04-12 11:19, Suliman wrote:
> So I got GDAL binding work. And now I need to understand how to
> translate C code to D.
>
> Here is simple tutorial: http://www.gdal.org/gdal_tutorial.html If I
> right understand it's easier to take C, than C++ code example.
>
> Now I am trying to get very simple example work. My code is:
>
> string fileTiff =
> `D:\code\RSM2DOC\data-example\03022014_101_022731_09_10_Rostov.tif`;
> if (!fileTiff.exists)
> writeln("Tiff file do not exists");
>
> GDALDatasetH hDataset = GDALOpen( toStringz(fileTiff),
> GDALAccess.GA_ReadOnly );
>
> GDALDriverH hDriver;
> hDriver = GDALGetDatasetDriver(hDataset);
>
> double adfGeoTransform[6];
>
> if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None )
> {
> writeln(adfGeoTransform[1]);
> }
>
>
> function (void*, double*) is not callable using argument types (void*,
> double[6])
>
> I can't understand why this error is rise up. It's look like 1-to-1 with
> C code.
>
> Also I can't understand at what moment adfGeoTransform get in it value.
GDALGetGeoTransform is declared to take a pointer to a double (array of
doubles). While adfGeoTransform is declared as a static array [1] of
doubles. Static arrays are stack allocated and passed by value, the
function expects an array which is passed by reference. Try adding
".ptr" to "adfGeoTransform" in the call to GDALGetGeoTransform.
[1] http://dlang.org/arrays.html#static-arrays
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list