[Interest] Doubt extending my app functions ability

Ernesto ernestoac at icrt.cu
Fri Jan 13 00:33:28 CET 2017

Hello again, first, thanks to Bob Hood for his quickly reply.

I understood your explanation about my second problem, but I have 
another issue writing your solution in an example project. I have a 
MainApp (QT Widgets project) and a Lib1 (C++ Static Library project) and 
here is the code:

//This is header file of *Lib1*





//this is my interface






QString/Name/()const; //example method


//This is cpp file of *Lib1*





//This is cpp file of *MainApp*



















//Always throw this error





//This is header file of my interface, is included by both projects










If a run the application he discover the Lib1.dll file, but the MainApp 
throw the “bad created instance” error, that is in cpp file of MainApp. 
InQObject* instance = pl.instance(); when I evaluate the “instance” 
variable, takes 0 value and the Qt documentation says: “/The function 
returns 0 if the plugin could not be loaded or if the root component 
object could not be instantiated.”/It refers to instance () function.

Until now I can´t solve this logical error.



El 12/01/2017 a las 21:29, Bob Hood escribió:
> On 1/12/2017 6:23 AM, Ernesto wrote:
>> Hello to everyone,
>> My name is Ernesto. I am a beginner in Qt programming and I have an 
>> specifics problems whit my first big project (desktop app). Let me 
>> explain myself:
>> I have to include plugins or add-ons to my application for new file 
>> format types; I looked around QPluginLoader class, Dynamic and Static 
>> libraries classes to achieve this goal, and here is my problem, in 
>> each one of this I have to include the header file and the library 
>> (or plugins) in my project. I have to develop other mini app to 
>> create those plugins or libraries. So here is _my first problem_, I 
>> don´t know how many plugins or libraries will be development to 
>> include in my app.
> Hello, Ernesto.
> I will not address your entire problem (because I'm not clearly 
> understanding the second one), but your first is easy enough to 
> answer.  The answer is:  You don't /need/do know how many plug-ins 
> will be in development.
> Plug-ins, by definition, are external code to your main application.  
> You application needs to /discover/those pieces of external code when 
> it runs.  This way, any number of plug-ins can be included with your 
> application--or even added later by the user to an existing 
> installation of your application--without having to modify any of your 
> main application's code.
> For example, when your main application starts, it looks in a 
> location--either hard-coded, or defined by the user--and discovers all 
> the available shared libraries:
>     ...
>     QDir plugins("ernestos_plugins");
>     QStringList plugins_list = plugins.entryList(QStringList() << 
> "*.dll" << "*.so", QDir::Files);
>     ...
> With each shared library it finds, it tests each to see if it is a 
> plug-in designed for your application by coercing it to the interface 
> contract, something like:
>     foreach(const QString& filename, plugins_list)
>     {
>         QString plugin_path = 
> QDir::toNativeSeparators(QString("%1/%2").arg(plugins.absolutePath()).arg(filename));
>         QPluginLoader(plugin_path);
>         QObject* instance = plugin.instance();
>         if(instance)
>         {
>             IErnestoPlugin* iernestofactory = 
> reinterpret_cast<IErnestoPlugin*>(instance);
>             if(iernestofactory)
>             {
>                 ...
> Each one that supports the contract of your interface 
> ("IErnestoPlugin") can be safely used within your application as a 
> plug-in designed for your main application.
> I hope I understood the first problem correctly. Apologies if I didn't.
> __________ Información de ESET NOD32 Antivirus, versión de la base de 
> firmas de virus 13498 (20160516) __________
> ESET NOD32 Antivirus ha comprobado este mensaje.
> http://www.eset.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20170113/573c04f8/attachment.html>

More information about the Interest mailing list