fix windows build (extern "C" can returns pointers, but not C++ containers)

This commit is contained in:
Juergen E. Fischer 2017-08-10 13:59:53 +02:00
parent 65092d1e9c
commit 6186c0f0ff
4 changed files with 17 additions and 10 deletions

View File

@ -37,7 +37,7 @@
SET(SIP_INCLUDES)
SET(SIP_TAGS)
SET(SIP_CONCAT_PARTS 10)
SET(SIP_CONCAT_PARTS 16)
SET(SIP_DISABLE_FEATURES)
SET(SIP_EXTRA_OPTIONS)
SET(SIP_EXTRA_OBJECTS)

View File

@ -21,7 +21,7 @@
#include "qgslogger.h"
#include "qgsproviderregistry.h"
typedef QList<QgsDataItemProvider *> dataItemProviders_t();
typedef QList<QgsDataItemProvider *> *dataItemProviders_t();
/**
@ -71,8 +71,10 @@ QgsDataItemProviderRegistry::QgsDataItemProviderRegistry()
dataItemProviders_t *dataItemProvidersFn = reinterpret_cast< dataItemProviders_t * >( cast_to_fptr( library->resolve( "dataItemProviders" ) ) );
if ( dataItemProvidersFn )
{
QList<QgsDataItemProvider *> *providerList = dataItemProvidersFn();
// the function is a factory - we keep ownership of the returned providers
mProviders << dataItemProvidersFn();
mProviders << *providerList;
delete providerList;
}
// legacy support - using dataItem() and dataCapabilities() methods

View File

@ -2928,10 +2928,11 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
}
QGISEXTERN QList<QgsDataItemProvider *> dataItemProviders()
QGISEXTERN QList< QgsDataItemProvider * > *dataItemProviders()
{
return QList<QgsDataItemProvider *>()
<< new QgsGeoPackageDataItemProvider;
QList< QgsDataItemProvider * > *providers = new QList< QgsDataItemProvider * >();
*providers << new QgsGeoPackageDataItemProvider;
return providers;
}
QgsCoordinateReferenceSystem QgsOgrProvider::crs() const

View File

@ -469,11 +469,15 @@ QgsDataItem *QgsWmsDataItemProvider::createDataItem( const QString &path, QgsDat
return nullptr;
}
QGISEXTERN QList<QgsDataItemProvider *> dataItemProviders()
QGISEXTERN QList<QgsDataItemProvider *> *dataItemProviders()
{
return QList<QgsDataItemProvider *>()
<< new QgsWmsDataItemProvider
<< new QgsXyzTileDataItemProvider;
QList<QgsDataItemProvider *> *providers = new QList<QgsDataItemProvider *>();
*providers
<< new QgsWmsDataItemProvider
<< new QgsXyzTileDataItemProvider;
return providers;
}
// ---------------------------------------------------------------------------