[gdal-dev] How to re-register a driver

Allen C Kempe allenck at windstream.net
Sat Mar 9 07:28:13 PST 2013


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!


More information about the gdal-dev mailing list