On 3/9/2013 2:12 AM, Even Rouault wrote:
Le samedi 09 mars 2013 02:20:55, Allen Kempe a écrit :
In my application, I would like to be able to programatically specify
which driver to use when opening a GDALDataset when more than one driver
can process the file. To do this, I have deregistered the drivers that I
don't want to use. The GetGDALDriverManager-::DeregisterDriver()
function does the trick.
The problem I have is being able to reregister the drivers that I
deregistered above. First of all, in order to register a driver, you
need a handle to it. It would seem that GetDriverByName should do the
trick but it returns NULL if the driver was previously deregistered.
Looking at the GDALDriverrManager code, it is easy to see why this is as
GDALDriver manager only searches the currently enabled drivers to get
its handle.
I then thought that calling GDALDriverManager::AutoloadDrivers() would
reinitialise the driver list but it does not return the driver that has
been deregistered. It would seem that GDALRegisterDriver would work but
it requires a handle to the driver which as I stated above, cannot be
obtained once a driver has been deregistered.
So, how does one get a handle to a deregistered driver or alternatively,
how can GDALDriverManager::AutoloadDrivers be made to reconstruct the
driver list with all the currently configured drivers?
It seems that GDALDriverManager::RegisterDriver is a useless function
since there is no way to get a handle to a previously deregistered driver.
Keep the handle of the driver that your deregister in some map, list, etc...
and reuse it wen you want to reregister the driver.
Or call again GDALAllRegister() that wil register again all drivers.
Or call GDALRegister_XXXX().
I had previously tried saving the handle as you suggested but that
resulted in a segmentation fault. However, the call to GDALAllRegister
accomplishes what I want to do.
Thanks!
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev