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