Am 23.06.2014 um 19:13 schrieb Till Oliver Knoll <till.oliver.kn...@gmail.com>:

> ...
> And I /still/ think that was exactly one of the (many) selling points of 
> using the Qt Meta Object over the RTTI, because the later is /not/ guaranteed 
> to work "across DLLs" when it comes to dynamic casting... it even sais (said) 
> so in the Qt docs, IIRC.

Here's a link that I quickly found which seems to confirm that at least at 
/some/ point in the past /some/ compilers did not support "dynamic casting 
across library boundaries using RTTI":

http://stackoverflow.com/questions/21314557/why-does-qt-reimplement-rtti-in-qobject-cast-event-type-etc

"Historically, with some compilersdynamic_cast failed across shared library 
boundaries."

(And no, the Stack Overflow answer wasn't given by me ;))

I think what Thiago meant by the "single library constraint" was simply: "make 
sure that the generated meta info code is only compiled and linked into one 
library (preferably the one which also implements the class), and not into 
several (-> multiple symbols!)" - E.g. by accidentally add the class header to 
several *.pro HEADER entries, such that it gets mocced and compiled several 
times (but why would you do that?).

Given the fact that the moccing is all automated with qmake (and assuming that 
you don't rename or #include the generated files in some "funny way" which 
might lead to pitfalls) I don't remember having ever problems with that. 

The only problem I do remember however is that the generated code was not "DLL 
exported": in order to keep the "export table" to a minimum I usually only 
export the (public/protected) methods (members) of a class that I really want 
to be callable from outside the library (you know, that "__dllexport / 
__dllimport" stuff - which also provides somewhat another "module" level of 
visibility, besides public/protected/private).

For QObject derived classes however using the Qt Meta Object system (and having 
the Q_OBJECT macro properly defined in their class declaration) one needs to 
export the /entire/ class. Otherwise the generated code (giving access to the 
meta system) would not be "visible" from outside the library (-> linker error).

That's the only "pitfall" that I remember. But maybe I am just overlooking the 
most obvious pitfall here?

Cheers,
  Oliver
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to