Greeting
I created plugin with Qt (5.6.2) and trying to load it but it returns null all the time. I checked several question and also tried the solutions but it didn't work for me.
Can you take a look of the following code and see whats wrong?
DeviceManager.hpp
	
	#ifndef DEVICE_MANAGER_HPP
#define DEVICE_MANAGER_HPP
 
#include <QtCore>
#include <string>
 
using namespace std;
 
class DeviceManager
{
 
public:
    virtual ~DeviceManager() {}
 
    virtual bool initialize() = 0;
    virtual string getBrandName() = 0;
 
};
 
QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(DeviceManager, "com.some.address/1.0")
QT_END_NAMESPACE
 
#endif //DEVICE_MANAGER_HPP
        #ifndef DEVICE_MANAGER_HPP
#define DEVICE_MANAGER_HPP
#include <QtCore>
#include <string>
using namespace std;
class DeviceManager
{
public:
    virtual ~DeviceManager() {}
    virtual bool initialize() = 0;
    virtual string getBrandName() = 0;
};
QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(DeviceManager, "com.some.address/1.0")
QT_END_NAMESPACE
#endif //DEVICE_MANAGER_HPP
To copy to clipboard, switch view to plain text mode 
  
DeviceManagerImpl.hpp
	
	#ifndef DEVICE_MANAGER_IMPL_HPP
#define DEVICE_MANAGER_IMPL_HPP
 
#include "DeviceManager.hpp"
 
#include <string>
using namespace std;
 
class DeviceManagerImpl 
: public QObject, 
public DeviceManager
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "com.some.address/1.0")
    Q_INTERFACES(DeviceManager)
 
public:
    DeviceManagerImpl();
 
    //Override Method
    bool initialize();          //Have implementation in cpp file
    string getBrandName();      //Have implementation in cpp file
 
private:
    ...
 
};
 
#endif //DEVICE_MANAGER_IMPL_HPP
        #ifndef DEVICE_MANAGER_IMPL_HPP
#define DEVICE_MANAGER_IMPL_HPP
#include "DeviceManager.hpp"
#include <string>
using namespace std;
class DeviceManagerImpl : public QObject, public DeviceManager
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "com.some.address/1.0")
    Q_INTERFACES(DeviceManager)
public:
    DeviceManagerImpl();
    //Override Method
    bool initialize();          //Have implementation in cpp file
    string getBrandName();      //Have implementation in cpp file
private:
    ...
};
#endif //DEVICE_MANAGER_IMPL_HPP
To copy to clipboard, switch view to plain text mode 
  
Pro File
	
	QT       += core gui sql
 
TARGET = Device-Manager
#TARGET = $$qtLibraryTarget(Device-Manager)
TEMPLATE = lib
CONFIG += plugin
 
 
SOURCES += \
    ...
 
HEADERS += \
    ...
 
DISTFILES += Device-Manager.json
 
unix {
    target.path = /usr/lib
    INSTALLS += target
}
        QT       += core gui sql
TARGET = Device-Manager
#TARGET = $$qtLibraryTarget(Device-Manager)
TEMPLATE = lib
CONFIG += plugin
SOURCES += \
    ...
HEADERS += \
    ...
DISTFILES += Device-Manager.json
unix {
    target.path = /usr/lib
    INSTALLS += target
}
To copy to clipboard, switch view to plain text mode 
  
And this is how i try to load the plugin in my main process.
	
	QObject * plugin 
= pluginLoader
->instance
();
  
if (plugin)
{
    deviceManager = qobject_cast<DeviceMAnager *>(plugin);
    return true;
}
else
{
    delete pluginLoader;
    return false;
}
        QPluginLoader * pluginLoader = new QPluginLoader(pluginPath.c_str());
QObject * plugin = pluginLoader->instance();
if (plugin)
{
    deviceManager = qobject_cast<DeviceMAnager *>(plugin);
    return true;
}
else
{
    delete pluginLoader;
    return false;
}
To copy to clipboard, switch view to plain text mode 
  
Im using QT 5.6.2 and QT Creator and MinGW 32bit.
Thanks in advance.
				
			
Bookmarks