I just tried: If I declare make functions of OGRSFDriverRegistrar as virtual,
everything is working as expected.
Most of the functions of other classes are virtual, why those are not? Best Regards, Mikhail On 2/22/2011 2:43 PM, Even Rouault wrote:
Le mardi 22 février 2011 23:14:50, Mikhail Tchernychev a écrit :Hello List, I wonder if someone could point me into the right direction. I would like to use GDAL as loaded DLL at run time, with LoadLibray() call under windows and corresponding calls under Linux. I see that most of the functions are virtual, so it seems it is made with this in mind. I am trying to compile simple program:I think you are going to inflict you a lot of pain with LoadLibrary() and C++ API at the same time ! If you really need to dynamicly load gdal, use the GDAL C API instead...#include "stdafx.h" #include<windows.h> #define CPL_DLL #include "ogrsf_frmts.h" typedef void (* pOGRRegisterAll)(); typedef OGRSFDriverRegistrar * (*pGetRegistar)(); int _tmain(int argc, _TCHAR* argv[]) { const char *pszDriverName = "ESRI Shapefile"; HMODULE hDll = LoadLibrary("gdal18.dll"); if(!hDll) { fprintf(stderr,"Cannot load library\n"); exit(0); } pOGRRegisterAll pRegFunc = (pOGRRegisterAll)GetProcAddress(hDll,"OGRRegisterAll"); (*pRegFunc)(); OGRSFDriver *poDriver; OGRSFDriverRegistrar * poRegistrar; pGetRegistar pRegistrarFunc = (pGetRegistar)GetProcAddress(hDll,"?GetRegistrar@OGRSFDriverRegistrar@@SAPA V1@XZ"); if(pRegistrarFunc == NULL ) { printf( "Cannot get registrar\n"); exit( 1 ); } poRegistrar = (*pRegistrarFunc)(); if( poRegistrar == NULL ) { printf( "Cannot get poRegistrar\n"); exit( 1 ); } // link error here: poDriver = poRegistrar->GetDriverByName(pszDriverName); if( poDriver == NULL ) { printf( "%s driver not available.\n", pszDriverName ); exit( 1 ); } return 0; } This is just part of the GDAL API tutorial. I see two problems here: 1. I have to use C++ mangled names, which is not very nice. Is there .DEF file for GDAL with meaningful names? 2. I got a link error, which apparently clear why, because GetDriverByName() is not virtual. Now then could I create new files if GDAL is loaded dynamically? I am using latest GDAL source with VC++ 2010 I tried to search mail list but did not seem find anything. Thank you very much, Mikhail _______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
_______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
