I believe it's possible, yes, but it will be challenging. I'm not aware of anybody else doing this.
In https://github.com/OSGeo/gdal/blob/trunk/gdal/swig/python/extensions/gdal_wrap.cpp you can see examples of C++ functions that access the GDAL objects referenced by Python objects. This isn't a stable public API by any means, and therefore I hesitate to recommend it. Maybe Even would be able to comment more on how much support there is for the SWIG-generated C++ Python classes. I presume you've already tried writing "_my_module" in Python and found it to be too slow? Good luck! On Mon, Nov 27, 2017 at 9:34 AM, Shawn Gong <[email protected]> wrote: > Thank you Sean. > > > > What I want to do is to compile C/C++ code into "_my_c_module.pyd" and > then to be called by Python. The Python code passes an argument to C/C++. > > I did previously by passing a file name (str) or a numpy array as > argument to C/C++, and it is all good. > > This time I want to pass a gdal dataset as an argument: > > > > in Python: > > from osgeo import gdal > > import _my_c_module > > ds=gdal.Open('my_filename") > > result = _my_c_module.function1(ds) > > > > is this possible? If yes, how? > > > > > Shawn > ------------------------------ > *From:* Sean Gillies [[email protected]] > *Sent:* November-27-17 11:09 AM > *To:* Shawn Gong > *Cc:* [email protected] > *Subject:* Re: [gdal-dev] pass gdal dataset as an argument from Python to > C > > Shawn, > > PyObject and GDALDatasetH are incompatible types and you can't pass the > former to a function that expects the latter. I'm surprised your program > can compile with these incompatible types. > > Do you mean for your module to extend GDAL's Python bindings? If you look > inside the C code of GDAL's Python bindings you may be able to see how to > get the GDALDatasetH associated with a Python dataset object. > > Hope this helps, > > > On Thu, Nov 23, 2017 at 1:25 PM, Shawn Gong <[email protected]> > wrote: > >> Hi list, >> >> >> >> Has anyone done this before? >> >> I try to pass a gdal dataset as an argument from Python to C. >> >> >> >> in my C code, I have >> >> PyObject* py_my_func(PyObject *self, PyObject *args) >> { >> >> PyObject *poDataset; >> >> >> >> if(!PyArg_ParseTuple(args, "Odd", &poDataset, &a1, &a2)) >> { >> return NULL; >> } >> >> >> >> my_func(poDataset, a1, a2); >> } >> >> >> >> void my_func(GDALDatasetH hDataset, double a1, double a2) >> >> { >> >> } >> >> >> >> Python crashed and hDataset was NULL >> >> Is it possible to do or I did something wrong? >> >> >> >> BTW, I have passed either a filename or a gdal array as an argument from >> Python to C, with success. >> >> Thanks, >> Shawn >> >> _______________________________________________ >> gdal-dev mailing list >> [email protected] >> https://lists.osgeo.org/mailman/listinfo/gdal-dev >> > > > > -- > Sean Gillies > -- Sean Gillies
_______________________________________________ gdal-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/gdal-dev
