IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QxOrm Discussion :

Compilation d'un projet utilisant des services générés


Sujet :

QxOrm

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut Compilation d'un projet utilisant des services générés
    Bonsoir.

    J'utilise QxOrm depuis peu et je souhaite créer mon propre serveur utilisant les services générés par QxEntityEditor.
    Le projet initial ainsi que les services ont compilés sans erreur. Néanmoins, quand j'essaye de compiler le serveur, j'ai des erreurs de compilation, dont voici la première :

    c:\users\nico\documents\lima\limacore\include\eTournamentState.gen.h:12: erreur : C2079: 'eTournamentState' utilise une class de 'LIMACORE_EXPORT' non d‚fini
    Voici le début de la classe que j'ai créé pour intégrer le service serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include "./precompiled.h"
     
    #include "coreserver.h"
    #include "../Services/include/Match.services.gen.h"
     
    #include <QxMemLeak.h>
     
    coreServer::coreServer(QObject *parent) :
        QObject(parent)
    {
    }
     
    void coreServer::init()
    {
        qx::service::QxConnect::getSingleton()->setPort(4567);
        qx::service::QxConnect::getSingleton()->setThreadCount(MAXCO);
        qx::service::QxConnect::getSingleton()->setSerializationType(qx::service::QxConnect::serialization_binary);
        qx::service::QxConnect::getSingleton()->setCompressData(true);
        qx::service::QxConnect::getSingleton()->setEncryptData(true);
     
        m_pThreadPool.reset(new qx::service::QxThreadPool());
        QObject::connect(m_pThreadPool.get(), SIGNAL(error(const QString &, qx::service::QxTransaction_ptr)), this,
                         SLOT(onError(const QString &, qx::service::QxTransaction_ptr)));
       // QObject::connect(m_pThreadPool.get(), SIGNAL(serverIsRunning(bool, qx::service::QxServer *)), this,
                         //SLOT(onServerIsRunning(bool, qx::service::QxServer *)));
        QObject::connect(m_pThreadPool.get(), SIGNAL(transactionFinished(qx::service::QxTransaction_ptr)), this,
                         SLOT(onTransactionFinished(qx::service::QxTransaction_ptr)));
        m_pThreadPool->start();
    }
     
    void coreServer::loadServices()
    {
       // Required to be sure to load all services dll : create a dummy service for each dll
       // It is also possible to create a 'plugin system' to load services
        services::Match_services dummy_01; Q_UNUSED(dummy_01);
    }
    Je me suis largement inspiré des projets d'exemple

    C'est depuis l'ajout de l'include de "Match.services.gen.h" que cette erreur est apparu. J'avance en effet pas à pas pour essayer de ne pas faire d'erreur.

    Auriez vous une idée de l'erreur que j'ai pu faire qui m'aurait amené à ce résultat ?

    A savoir, le fichier sur lequel il y a une erreur est un fichier du projet initial généré par QxEE, non les services.

    En vous remerciant.

    Nicolas L

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut


    Je vois que tu as récupéré le commentaire suivant du tutoriel qxClientServer :
    // Required to be sure to load all services dll : create a dummy service for each dll
    // It is also possible to create a 'plugin system' to load services
    Et c'est ça ton problème : QxEntityEditor génère tout ce qu'il faut pour utiliser les services avec un système de plugin.
    Du coup, tu n'as pas à ajouter de dépendance à ton serveur : il faut que tu vois ton serveur comme un chargeur de plugins.

    Dans QxEntityEditor, dans les paramètres du plugin d'export des services, tu as une option :
    - Generate server application
    - Server application location


    Je te conseille de cocher cette option pour générer un exemple de serveur d'application : il montre comment charger les plugins de services.
    Tu peux ensuite partir de ce serveur d'applications pour créer le tien...

    Tu as aussi un exemple dans la vidéo de présentation de QxEntityEditor (Créer une application client/serveur pour transférer son modèle de données sur le réseau (12m 31s)) :
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Merci de ta réponse. Ok pour le serveur, il ne sert qu'à charger les services. Pour ce faire, j'ai désormais uniquement ces 2 lignes dans loadServices :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QPluginLoader loader("C:\\Users\\Nico\\Documents\\LIMA\\Services\\bin\\LimaCoreServicesServerd.dll");
        QObject * pPlugin = loader.instance();
    Est ce suffisant ? Ou est ce nécessaire réutiliser l'intégralité de l'interface IPluginServices ?

    Maintenant, vient la question du client. Je ne peux pas faire le même "simple" chargement de plugin dans ce cas, n'est ce pas ? Je dois m'inspirer cette fois ci du projet qxClient pour utiliser mes classes générés ?

    En te remerciant.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    Est ce suffisant ? Ou est ce nécessaire réutiliser l'intégralité de l'interface IPluginServices ?
    Si QObject * pPlugin n'est pas NULL, alors oui c'est suffisant : ton plugin est chargé et tes services sont disponibles et prêts à être utilisés par ta couche cliente.

    Je ne peux pas faire le même "simple" chargement de plugin dans ce cas, n'est ce pas ? Je dois m'inspirer cette fois ci du projet qxClient pour utiliser mes classes générés ?
    Oui pour la couche client, inspire toi du tutoriel qxClientServer.
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Je te remercie de ta patience. Néanmoins, j'ai encore quelques soucis. A priori, j'ai réussi à créer mon client. Voici quelques extraits, tu me diras ce que tu en penses :

    Classe contenant mes tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include "./precompiled.h"
    #include "coreclient.h"
     
    #include "../Services/include/User.services.gen.h"
     
    #include <QxMemLeak.h>
     
     
    coreClient::coreClient(QObject *parent) :
        QObject(parent)
    {
    }
     
    void coreClient::init()
    {
        qx::service::QxConnect::getSingleton()->setIp("127.0.0.1");
        qx::service::QxConnect::getSingleton()->setPort(4567);
    }
     
    void coreClient::test()
    {
        services::User_ptr user = services::User_ptr(new User);
        user->setlogin("tortuga");
        user->setpseudo("tortuga");
     
        services::User_services serv;
     
        QSqlError err = serv.insert(user);
     
        qDebug() << err.text();
     
     
    }
    Mon .pro contient l'inclusion des librairies de la classe de base ainsi que le service client. J'ai également du lui rajouter "DEFINES += _LIMACORE_MODE_CLIENT", sans quoi la procédure insert() n'était pas disponible.

    Lors de l’exécution, j'ai une erreur ASSERT :

    Debug Error!

    Program: C:\Qt\5.3\msvc2013\bin\Qt5Cored.dll
    Module: 5.3.2
    File: global\qglobal.cpp
    Line: 2127

    ASSERT: "! bExist && ! sKey.isEmpty()" in file ..\QxOrm\src\QxSingleton\QxSingletonX.cpp, line 68
    Voici le contenu de la stack, si ca peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    0	qt_message_fatal	qlogging.cpp	1357	0x66161881	
    1	QMessageLogger::fatal	qlogging.cpp	669	0x66160ff6	
    2	qt_assert	qglobal.cpp	2127	0x66159e04	
    3	qx::QxSingletonX::addSingleton	QxSingletonX.cpp	68	0xf273c1c	
    4	qx::IxSingleton::IxSingleton	IxSingleton.cpp	49	0xf273316	
    5	qx::QxSingleton<qx::QxClass<qx::trait::no_base_class_defined> >::QxSingleton<qx::QxClass<qx::trait::no_base_class_defined> >	QxSingleton.h	68	0x523744	
    6	qx::QxClass<qx::trait::no_base_class_defined>::QxClass<qx::trait::no_base_class_defined>	QxClass.inl	244	0x522419	
    7	qx::QxSingleton<qx::QxClass<qx::trait::no_base_class_defined> >::getSingleton	QxSingleton.inl	45	0x562d44	
    8	qx::QxClass<User>::init	QxClass.inl	43	0x61dc38	
    9	qx::QxClass<User>::QxClass<User>	QxClass.h	103	0x61025c	
    10	qx::QxSingleton<qx::QxClass<User> >::getSingleton	QxSingleton.inl	45	0x61b5d4	
    11	qx::serialization::detail::save<boost::archive::binary_oarchive,User>	QxSerializeInvoker.h	99	0x694b38	
    12	qx::serialization::detail::saver<boost::archive::binary_oarchive,User>::invoke	QxSerializeInvoker.h	114	0x69ca54	
    13	boost::serialization::serialize	User.gen.cpp	13	0x69f694	
    14	boost::serialization::serialize_adl<boost::archive::binary_oarchive,User>	serialization.hpp	128	0xff8fca8	
    15	boost::archive::detail::oserializer<boost::archive::binary_oarchive,User>::save_object_data	oserializer.hpp	152	0xffb854a	
    16	boost::archive::detail::basic_oarchive_impl::save_object	basic_oarchive.cpp	255	0x503348aa	
    17	boost::archive::detail::basic_oarchive::save_object	basic_oarchive.cpp	430	0x5033482e	
    18	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_standard::invoke<User>	oserializer.hpp	259	0xff86865	
    19	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<User>	oserializer.hpp	308	0xff867c5	
    20	boost::archive::save<boost::archive::binary_oarchive,User const >	oserializer.hpp	525	0xff8c620	
    21	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<User const >	common_oarchive.hpp	69	0xff8dcdd	
    22	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<User>	basic_binary_oarchive.hpp	82	0xff8e567	
    23	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<User const >	binary_oarchive_impl.hpp	64	0xff8dca5	
    24	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<User const >	interface_oarchive.hpp	64	0xff7eedd	
    25	boost::serialization::nvp<User>::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xff8c7fb	
    26	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<User> const >	access.hpp	94	0xff89b63	
    27	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<User> >::invoke	split_member.hpp	43	0xffb3f24	
    28	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<User> >	split_member.hpp	69	0xff90c64	
    29	boost::serialization::nvp<User>::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xff8ee68	
    30	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<User> >	access.hpp	119	0xff8f0e3	
    31	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<User> >	serialization.hpp	69	0xff8f104	
    32	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<User> >	serialization.hpp	128	0xff8faa8	
    33	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<User> >	oserializer.hpp	245	0xff86122	
    34	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<User> >	oserializer.hpp	308	0xff860e5	
    35	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<User> const >	oserializer.hpp	525	0xff8c520	
    36	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<User> const >	common_oarchive.hpp	69	0xff8d7cd	
    37	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<User> >	basic_binary_oarchive.hpp	82	0xff8e297	
    38	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<User> const >	binary_oarchive_impl.hpp	64	0xff8d795	
    39	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<User> const >	interface_oarchive.hpp	64	0xff7ebdd	
    40	boost::archive::detail::pointer_oserializer<boost::archive::binary_oarchive,User>::save_object_ptr	oserializer.hpp	202	0xffb8aa3	
    41	boost::archive::detail::basic_oarchive_impl::save_pointer	basic_oarchive.cpp	399	0x50335190	
    42	boost::archive::detail::basic_oarchive::save_pointer	basic_oarchive.cpp	438	0x50334c6e	
    43	boost::archive::detail::save_pointer_type<boost::archive::binary_oarchive>::polymorphic::save<User>	oserializer.hpp	408	0xff8be8f	
    44	boost::archive::detail::save_pointer_type<boost::archive::binary_oarchive>::save<User>	oserializer.hpp	460	0xff8bd2a	
    45	boost::archive::detail::save_pointer_type<boost::archive::binary_oarchive>::invoke<User const *>	oserializer.hpp	473	0xff85dbc	
    46	boost::archive::save<boost::archive::binary_oarchive,User const * const>	oserializer.hpp	525	0xff8c8d2	
    47	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<User const * const>	common_oarchive.hpp	69	0xff8e0ed	
    48	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<User const *>	basic_binary_oarchive.hpp	82	0xff8df87	
    49	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<User const * const>	binary_oarchive_impl.hpp	64	0xff8e0b5	
    50	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<User const * const>	interface_oarchive.hpp	64	0xff7f01d	
    51	boost::serialization::nvp<User const *>::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xff8c73b	
    52	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> const >	access.hpp	94	0xff89ae3	
    53	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> >::invoke	split_member.hpp	43	0xffb3ea4	
    54	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> >	split_member.hpp	69	0xff90be4	
    55	boost::serialization::nvp<User const *>::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xff8eda8	
    56	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> >	access.hpp	119	0xff8efe3	
    57	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> >	serialization.hpp	69	0xff8f004	
    58	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> >	serialization.hpp	128	0xff8f9a8	
    59	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<User const *> >	oserializer.hpp	245	0xff85f82	
    60	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<User const *> >	oserializer.hpp	308	0xff85f65	
    61	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<User const *> const >	oserializer.hpp	525	0xff8c4a0	
    62	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<User const *> const >	common_oarchive.hpp	69	0xff8d64d	
    63	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<User const *> >	basic_binary_oarchive.hpp	82	0xff8e1d7	
    64	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<User const *> const >	binary_oarchive_impl.hpp	64	0xff8d615	
    65	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<User const *> const >	interface_oarchive.hpp	64	0xff7e9dd	
    66	boost::serialization::save<boost::archive::binary_oarchive,User>	shared_ptr.hpp	109	0xff8ca82	
    67	boost::serialization::free_saver<boost::archive::binary_oarchive,boost::shared_ptr<User> >::invoke	split_free.hpp	45	0xffb3b18	
    68	boost::serialization::split_free<boost::archive::binary_oarchive,boost::shared_ptr<User> >	split_free.hpp	74	0xff90964	
    69	boost::serialization::serialize<boost::archive::binary_oarchive,User>	shared_ptr.hpp	180	0xff8f294	
    70	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::shared_ptr<User> >	serialization.hpp	128	0xff8fc68	
    71	boost::archive::detail::oserializer<boost::archive::binary_oarchive,boost::shared_ptr<User> >::save_object_data	oserializer.hpp	152	0xffb84ea	
    72	boost::archive::detail::basic_oarchive_impl::save_object	basic_oarchive.cpp	275	0x503349ca	
    73	boost::archive::detail::basic_oarchive::save_object	basic_oarchive.cpp	430	0x5033482e	
    74	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_standard::invoke<boost::shared_ptr<User> >	oserializer.hpp	259	0xff86725	
    75	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::shared_ptr<User> >	oserializer.hpp	308	0xff86685	
    76	boost::archive::save<boost::archive::binary_oarchive,boost::shared_ptr<User> const >	oserializer.hpp	525	0xff8c600	
    77	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::shared_ptr<User> const >	common_oarchive.hpp	69	0xff8dc4d	
    78	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::shared_ptr<User> >	basic_binary_oarchive.hpp	82	0xff8e4c7	
    79	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::shared_ptr<User> const >	binary_oarchive_impl.hpp	64	0xff8dc15	
    80	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::shared_ptr<User> const >	interface_oarchive.hpp	64	0xff7ee9d	
    81	boost::serialization::nvp<boost::shared_ptr<User> const >::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xff8c6db	
    82	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > const >	access.hpp	94	0xff89aa3	
    83	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > >::invoke	split_member.hpp	43	0xffb3e64	
    84	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > >	split_member.hpp	69	0xff90ba4	
    85	boost::serialization::nvp<boost::shared_ptr<User> const >::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xff8ed48	
    86	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > >	access.hpp	119	0xff8ef63	
    87	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > >	serialization.hpp	69	0xff8ef84	
    88	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > >	serialization.hpp	128	0xff8f928	
    89	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<boost::shared_ptr<User> const > >	oserializer.hpp	245	0xff85ec2	
    90	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<boost::shared_ptr<User> const > >	oserializer.hpp	308	0xff85ea5	
    91	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<User> const > const >	oserializer.hpp	525	0xff8c460	
    92	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<boost::shared_ptr<User> const > const >	common_oarchive.hpp	69	0xff8d58d	
    93	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<boost::shared_ptr<User> const > >	basic_binary_oarchive.hpp	82	0xff8e177	
    94	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<boost::shared_ptr<User> const > const >	binary_oarchive_impl.hpp	64	0xff8d555	
    95	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<boost::shared_ptr<User> const > const >	interface_oarchive.hpp	64	0xff7e8dd	
    96	qx::QxDataMember<boost::shared_ptr<User>,services::User_input>::toArchive<boost::archive::binary_oarchive>	QxDataMember.h	145	0xff91016	
    97	qx::QxDataMember<boost::shared_ptr<User>,services::User_input>::toArchive	QxDataMember.h	114	0xffb94f7	
    98	qx::QxDataMemberX<services::User_input>::toArchive<boost::archive::binary_oarchive>	QxDataMemberX.inl	213	0xff915db	
    99	qx::serialization::detail::save<boost::archive::binary_oarchive,services::User_input>	QxSerializeInvoker.h	100	0xff8cb36	
    100	qx::serialization::detail::saver<boost::archive::binary_oarchive,services::User_input>::invoke	QxSerializeInvoker.h	114	0xffb3fa4	
    101	boost::serialization::serialize	User.services.gen.cpp	11	0xffb9044	
    102	boost::serialization::serialize_adl<boost::archive::binary_oarchive,services::User_input>	serialization.hpp	128	0xff8fce8	
    103	boost::archive::detail::oserializer<boost::archive::binary_oarchive,services::User_input>::save_object_data	oserializer.hpp	152	0xffb85aa	
    104	boost::archive::detail::basic_oarchive_impl::save_object	basic_oarchive.cpp	255	0x503348aa	
    105	boost::archive::detail::basic_oarchive::save_object	basic_oarchive.cpp	430	0x5033482e	
    106	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_standard::invoke<services::User_input>	oserializer.hpp	259	0xff869a5	
    107	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<services::User_input>	oserializer.hpp	308	0xff86905	
    108	boost::archive::save<boost::archive::binary_oarchive,services::User_input const >	oserializer.hpp	525	0xff8c640	
    109	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<services::User_input const >	common_oarchive.hpp	69	0xff8dd6d	
    110	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<services::User_input>	basic_binary_oarchive.hpp	82	0xff8e607	
    111	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<services::User_input const >	binary_oarchive_impl.hpp	64	0xff8dd35	
    112	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<services::User_input const >	interface_oarchive.hpp	64	0xff7ef1d	
    113	boost::serialization::nvp<services::User_input>::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xff8c82b	
    114	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> const >	access.hpp	94	0xff89b83	
    115	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> >::invoke	split_member.hpp	43	0xffb3f44	
    116	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> >	split_member.hpp	69	0xff90c84	
    117	boost::serialization::nvp<services::User_input>::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xff8ee98	
    118	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> >	access.hpp	119	0xff8f123	
    119	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> >	serialization.hpp	69	0xff8f144	
    120	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> >	serialization.hpp	128	0xff8fae8	
    121	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<services::User_input> >	oserializer.hpp	245	0xff86182	
    122	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<services::User_input> >	oserializer.hpp	308	0xff86145	
    123	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<services::User_input> const >	oserializer.hpp	525	0xff8c540	
    124	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<services::User_input> const >	common_oarchive.hpp	69	0xff8d82d	
    125	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<services::User_input> >	basic_binary_oarchive.hpp	82	0xff8e2c7	
    126	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<services::User_input> const >	binary_oarchive_impl.hpp	64	0xff8d7f5	
    127	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<services::User_input> const >	interface_oarchive.hpp	64	0xff7ec5d	
    128	boost::archive::detail::pointer_oserializer<boost::archive::binary_oarchive,services::User_input>::save_object_ptr	oserializer.hpp	202	0xffb8b43	
    129	boost::archive::detail::basic_oarchive_impl::save_pointer	basic_oarchive.cpp	399	0x50335190	
    130	boost::archive::detail::basic_oarchive::save_pointer	basic_oarchive.cpp	438	0x50334c6e	
    131	boost::archive::detail::save_pointer_type<boost::archive::binary_oarchive>::polymorphic::save<qx::service::IxParameter>	oserializer.hpp	445	0xf373419	
    132	boost::archive::detail::save_pointer_type<boost::archive::binary_oarchive>::save<qx::service::IxParameter>	oserializer.hpp	460	0xf37313a	
    133	boost::archive::detail::save_pointer_type<boost::archive::binary_oarchive>::invoke<qx::service::IxParameter const *>	oserializer.hpp	473	0xf370d3c	
    134	boost::archive::save<boost::archive::binary_oarchive,qx::service::IxParameter const * const>	oserializer.hpp	525	0xf3739f2	
    135	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<qx::service::IxParameter const * const>	common_oarchive.hpp	69	0xf373fdc	
    136	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<qx::service::IxParameter const *>	basic_binary_oarchive.hpp	82	0xf373f07	
    137	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<qx::service::IxParameter const * const>	binary_oarchive_impl.hpp	64	0xf373fa5	
    138	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<qx::service::IxParameter const * const>	interface_oarchive.hpp	64	0xf36fecc	
    139	boost::serialization::nvp<qx::service::IxParameter const *>::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xf37393b	
    140	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> const >	access.hpp	94	0xf372013	
    141	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> >::invoke	split_member.hpp	43	0xf37a554	
    142	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> >	split_member.hpp	69	0xf375224	
    143	boost::serialization::nvp<qx::service::IxParameter const *>::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xf3745b8	
    144	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> >	access.hpp	119	0xf374733	
    145	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> >	serialization.hpp	69	0xf374754	
    146	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> >	serialization.hpp	128	0xf374ca8	
    147	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<qx::service::IxParameter const *> >	oserializer.hpp	245	0xf370e22	
    148	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<qx::service::IxParameter const *> >	oserializer.hpp	308	0xf370e05	
    149	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::IxParameter const *> const >	oserializer.hpp	525	0xf373850	
    150	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<qx::service::IxParameter const *> const >	common_oarchive.hpp	69	0xf373c0c	
    151	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<qx::service::IxParameter const *> >	basic_binary_oarchive.hpp	82	0xf374037	
    152	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<qx::service::IxParameter const *> const >	binary_oarchive_impl.hpp	64	0xf373bd5	
    153	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<qx::service::IxParameter const *> const >	interface_oarchive.hpp	64	0xf36fc0c	
    154	boost::serialization::save<boost::archive::binary_oarchive,qx::service::IxParameter>	shared_ptr.hpp	109	0xf373a32	
    155	boost::serialization::free_saver<boost::archive::binary_oarchive,boost::shared_ptr<qx::service::IxParameter> >::invoke	split_free.hpp	45	0xf37a3e8	
    156	boost::serialization::split_free<boost::archive::binary_oarchive,boost::shared_ptr<qx::service::IxParameter> >	split_free.hpp	74	0xf3750e4	
    157	boost::serialization::serialize<boost::archive::binary_oarchive,qx::service::IxParameter>	shared_ptr.hpp	180	0xf374834	
    158	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::shared_ptr<qx::service::IxParameter> >	serialization.hpp	128	0xf374da8	
    159	boost::archive::detail::oserializer<boost::archive::binary_oarchive,boost::shared_ptr<qx::service::IxParameter> >::save_object_data	oserializer.hpp	152	0xf37ad9a	
    160	boost::archive::detail::basic_oarchive_impl::save_object	basic_oarchive.cpp	275	0x503349ca	
    161	boost::archive::detail::basic_oarchive::save_object	basic_oarchive.cpp	430	0x5033482e	
    162	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_standard::invoke<boost::shared_ptr<qx::service::IxParameter> >	oserializer.hpp	259	0xf371065	
    163	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::shared_ptr<qx::service::IxParameter> >	oserializer.hpp	308	0xf370fc5	
    164	boost::archive::save<boost::archive::binary_oarchive,boost::shared_ptr<qx::service::IxParameter> const >	oserializer.hpp	525	0xf3738d0	
    165	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::shared_ptr<qx::service::IxParameter> const >	common_oarchive.hpp	69	0xf373d8c	
    166	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::shared_ptr<qx::service::IxParameter> >	basic_binary_oarchive.hpp	82	0xf3740f7	
    167	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::shared_ptr<qx::service::IxParameter> const >	binary_oarchive_impl.hpp	64	0xf373d55	
    168	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::shared_ptr<qx::service::IxParameter> const >	interface_oarchive.hpp	64	0xf36fe0c	
    169	boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> >::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xf37396b	
    170	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > const >	access.hpp	94	0xf372033	
    171	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >::invoke	split_member.hpp	43	0xf37a574	
    172	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	split_member.hpp	69	0xf375244	
    173	boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> >::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xf3745e8	
    174	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	access.hpp	119	0xf374773	
    175	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	serialization.hpp	69	0xf374794	
    176	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	serialization.hpp	128	0xf374ce8	
    177	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	oserializer.hpp	245	0xf370e82	
    178	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	oserializer.hpp	308	0xf370e45	
    179	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > const >	oserializer.hpp	525	0xf373870	
    180	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > const >	common_oarchive.hpp	69	0xf373c6c	
    181	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > >	basic_binary_oarchive.hpp	82	0xf374067	
    182	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > const >	binary_oarchive_impl.hpp	64	0xf373c35	
    183	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<boost::shared_ptr<qx::service::IxParameter> > const >	interface_oarchive.hpp	64	0xf36fc8c	
    184	boost::serialization::qx_save<boost::archive::binary_oarchive>	QxTransaction.cpp	206	0xf396242	
    185	boost::serialization::save	QxTransaction.cpp	262	0xf394794	
    186	boost::serialization::free_saver<boost::archive::binary_oarchive,qx::service::QxTransaction>::invoke	split_free.hpp	45	0xf3905b8	
    187	boost::serialization::split_free<boost::archive::binary_oarchive,qx::service::QxTransaction>	split_free.hpp	74	0xf389864	
    188	boost::serialization::serialize<boost::archive::binary_oarchive>	QxTransaction.h	153	0xf389624	
    189	boost::serialization::serialize_adl<boost::archive::binary_oarchive,qx::service::QxTransaction>	serialization.hpp	128	0xf389798	
    190	boost::archive::detail::oserializer<boost::archive::binary_oarchive,qx::service::QxTransaction>::save_object_data	oserializer.hpp	152	0xf39145a	
    191	boost::archive::detail::basic_oarchive_impl::save_object	basic_oarchive.cpp	293	0x50334ab7	
    192	boost::archive::detail::basic_oarchive::save_object	basic_oarchive.cpp	430	0x5033482e	
    193	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_standard::invoke<qx::service::QxTransaction>	oserializer.hpp	259	0xf388255	
    194	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<qx::service::QxTransaction>	oserializer.hpp	308	0xf3881b5	
    195	boost::archive::save<boost::archive::binary_oarchive,qx::service::QxTransaction const >	oserializer.hpp	525	0xf389220	
    196	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<qx::service::QxTransaction const >	common_oarchive.hpp	69	0xf3893ec	
    197	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<qx::service::QxTransaction>	basic_binary_oarchive.hpp	82	0xf3894d7	
    198	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<qx::service::QxTransaction const >	binary_oarchive_impl.hpp	64	0xf3893b5	
    199	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<qx::service::QxTransaction const >	interface_oarchive.hpp	64	0xf38286c	
    200	boost::serialization::nvp<qx::service::QxTransaction const >::save<boost::archive::binary_oarchive>	nvp.hpp	76	0xf38926b	
    201	boost::serialization::access::member_save<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > const >	access.hpp	94	0xf3886a3	
    202	boost::serialization::detail::member_saver<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > >::invoke	split_member.hpp	43	0xf390644	
    203	boost::serialization::split_member<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > >	split_member.hpp	69	0xf3898e4	
    204	boost::serialization::nvp<qx::service::QxTransaction const >::serialize<boost::archive::binary_oarchive>	nvp.hpp	85	0xf3895f8	
    205	boost::serialization::access::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > >	access.hpp	119	0xf389643	
    206	boost::serialization::serialize<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > >	serialization.hpp	69	0xf389664	
    207	boost::serialization::serialize_adl<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > >	serialization.hpp	128	0xf389758	
    208	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::save_only::invoke<boost::serialization::nvp<qx::service::QxTransaction const > >	oserializer.hpp	245	0xf388112	
    209	boost::archive::detail::save_non_pointer_type<boost::archive::binary_oarchive>::invoke<boost::serialization::nvp<qx::service::QxTransaction const > >	oserializer.hpp	308	0xf3880f5	
    210	boost::archive::save<boost::archive::binary_oarchive,boost::serialization::nvp<qx::service::QxTransaction const > const >	oserializer.hpp	525	0xf389200	
    211	boost::archive::detail::common_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<qx::service::QxTransaction const > const >	common_oarchive.hpp	69	0xf38931c	
    212	boost::archive::basic_binary_oarchive<boost::archive::binary_oarchive>::save_override<boost::serialization::nvp<qx::service::QxTransaction const > >	basic_binary_oarchive.hpp	82	0xf3894a7	
    213	boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::save_override<boost::serialization::nvp<qx::service::QxTransaction const > const >	binary_oarchive_impl.hpp	64	0xf3892e5	
    214	boost::archive::detail::interface_oarchive<boost::archive::binary_oarchive>::operator<<<boost::serialization::nvp<qx::service::QxTransaction const > const >	interface_oarchive.hpp	64	0xf3827ec	
    215	qx::QxArchive<qx::service::QxTransaction,boost::archive::binary_iarchive,boost::archive::binary_oarchive>::toByteArray	QxArchive.inl	208	0xf391de7	
    216	qx::serialization::binary::to_byte_array<qx::service::QxTransaction>	QxArchive.h	141	0xf389910	
    217	qx::service::QxTools::writeSocket	QxTools.cpp	127	0xf380d91	
    218	qx::service::QxTransaction::writeSocket	QxTransaction.cpp	126	0xf39433b	
    219	qx::service::QxTransaction::executeClient	QxTransaction.cpp	110	0xf393e4f	
    220	qx::service::execute_client	QxTransaction.cpp	156	0xf394714	
    221	services::User_services::insert_	User.services.gen.cpp	86	0xff7666b	
    222	services::User_services::insert	User.services.gen.cpp	444	0xff777d5	
    223	coreClient::test	coreclient.cpp	32	0xf9c68f	
    224	main	main.cpp	16	0xf9b6b7	
    225	WinMain	qtmain_win.cpp	131	0xfd2fda	
    226	__tmainCRTStartup	crtexe.c	618	0xfd23df	
    227	WinMainCRTStartup	crtexe.c	466	0xfd219d	
    228	BaseThreadInitThunk	KERNEL32		0x76bb919f	
    229	__RtlUserThreadStart	ntdll		0x77bb0bbb	
    230	_RtlUserThreadStart	ntdll		0x77bb0b91
    En revanche, le serveur reçoit bien une connexion, qui se termine en erreur :

    "10.10.2014 15:56 : [QxOrm] unable to read request from socket : 'invalid bytes count available to retrieve transaction header'"
    Merci encore pour ton temps.

    Nicolas L

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    As-tu essayé de compiler le projet de test qxClientServer ?
    Est-ce que ça fonctionne correctement ?

    Le mieux serait que tu zippes ton projet client et ton projet server (fait un clean avant ), puis attache le à ce sujet, comme ça je pourrais le télécharger et voir ce qui ne va pas...
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Le projet qxClient Server fonctionne très bien oui.

    Voici le projet, incluant le projet source, les services, ainsi que mes client et serveur. Méfie toi à la compilation, quelques chemins sont absolus et non relatifs.
    LIMA.rar

    Je te remercie beaucoup.

    edit : Voici également le .qxee : LimaCore.rar

  8. #8
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Je crois avoir trouvé quelque chose : Je n'ai pas du tout initialisé les infos liés à la base de données. Je fais les modifs et je te tiens au courant

    edit : Visiblement non, ça n'a pas changé grand chose.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    La différence avec le tutoriel qxClientServer est que entités et services ne sont pas dans la même DLL.
    Je pense qu'il n'y a pas ce soucis sous Linux (car la gestion des .SO et différente de la gestion des .DLL), mais ce serait intéressant de tester pour vérifier.

    En attendant que je puisse apporter une correction à ce problème, voici comment tu peux contourner facilement pour pouvoir avancer dans ton projet (l'idée étant de fusionner entités et services dans une même DLL) :
    1- fais un clean complet de ton projet et efface tous les makefile* précédemment créés par qmake ;
    2- dans ton fichier "./Services/custom/LimaCore.services.pri", ajoute ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ## -- Put your custom code here -- ##
     
    DEFINES += _BUILDING_LIMACORE
     
    include($$PWD/../../limaCore/LimaCore.gen.pri)
     
    CONFIG(debug, debug|release) {
    LIBS -= -l"LimaCored"
    } else {
    LIBS -= -l"LimaCore"
    } # CONFIG(debug, debug|release)
    3- dans ton projet ClientQxOrm, fichier ClientQxOrm.pro, supprime la référence à la DLL LimaCore qui n'existera plus, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CONFIG(debug, debug|release) {
    TARGET = LIMAClientd
    LIBS += -l"QxOrmd"
    LIBS += -l"LimaCoreServicesClientd"
    #LIBS += -l"LimaCored"
    } else {
    TARGET = LIMAClient
    LIBS += -l"QxOrm"
    LIBS += -l"LimaCoreServicesClient"
    #LIBS += -l"LimaCore"
    } # CONFIG(debug, debug|release)
    Je viens de tester et ça fonctionne, dis-moi si ça fonctionne également pour toi...

    Remarque : pourquoi avoir modifié le fichier "./Services/custom/LimaCore.services.pri" et pas un autre ?
    Ce fichier se trouve dans le dossier "custom", et ne sera jamais modifié par un export de QxEntityEditor : tu peux donc continuer à travailler avec QxEntityEditor, générer des exports, tu n'auras pas à remettre ce code à chaque fois.
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Ca marche niquel !! Il ne reste plus qu'à régler mes problème d'initialisation de base de données et je c'est bon !

    Merci beaucoup pour ton temps !

    Je reviens vers toi si j'ai un autre problème, mais ça ne devrait pas être pour tout de suite

  11. #11
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Après quelques tests, ça marche très bien en sqlite, en revanche je ne peux pas initialiser les table indexé sur un uuid en MYSQL, j'ai l'erreur suivante :

    [QxOrm] execute sql query failed : CREATE TABLE t_User (Uuid TEXT NOT NULL PRIMARY KEY, login TEXT, firstname TEXT, lastname TEXT, pseudo TEXT, password TEXT, is_token SMALLINT, is_admin SMALLINT, team_id TEXT)
    QMYSQL: Unable to execute query
    BLOB/TEXT column 'Uuid' used in key specification without a key length
    En tout cas merci beaucoup, je peux désormais avancer beaucoup plus vite dans l'intégration à mon projet.

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    Ca marche niquel !


    en revanche je ne peux pas initialiser les table indexé sur un uuid en MYSQL
    La fonction qx::dao::create_table<T>() ne doit servir que pour créér des prototypes et ne fonctionne qu'avec SQLite (plus de détails dans la FAQ).
    Pour créer ton schéma de base de données, je te conseille d'utiliser le plugin d'export DDL SQL de QxEntityEditor : ce plugin génère un fichier .sql (compatible MySQL pour ton cas), tu peux lire ce fichier puis exécuter la requête avec la fonction qx::dao::call_query().

    Remarque : je note le sujet [Résolu] => la prochaine fois, il faudrait que tu fasses un nouveau sujet sur le forum (plus facile à s'y retrouver pour les personnes qui peuvent avoir les mêmes problématiques que toi).
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    C'est parfait, merci !

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    Voici une version BETA de QxOrm pour corriger ta problématique de DLL (fusionner entités & services) :
    http://www.qxorm.com/version/QxOrm_1.3.1_BETA_12.zip

    Est-ce que tu pourrais stp télécharger cette version BETA, faire un clean de ton projet (+ supprimer tous les makefile*), et re-tester le tout (pense à supprimer le code qu'on a mis dans /custom/ + ajout de la référence à LimaCore dans le projet ClientQxOrm) ?
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Désolé pour le délai, mais au moins ta béta fonctionne ! En revanche, pour la création de table en mysql, lorsqu'elle sont indexé sur un QUUID, la valeur par défaut (TEXT) est refusé. Pour palier au problème, j'ai lu sur internet que l'on pouvait mettre VARBINARY(16). Reste à savoir si c'est compatible avec le fonctionnement de QxOrm.

    Je te remercie beaucoup !

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 481
    Points : 4 238
    Points
    4 238
    Par défaut
    ta béta fonctionne !


    pour la création de table en mysql, lorsqu'elle sont indexé sur un QUUID, la valeur par défaut (TEXT) est refusé. Pour palier au problème, j'ai lu sur internet que l'on pouvait mettre VARBINARY(16).
    Avec QxEntityEditor, dans les paramètres du plugin d'export DDL SQL, il y a une table de mapping personnalisable : pour un type C++ donné (QUuid dans ton cas), tu peux spécifier le type SQL que tu souhaites (VARBINARY(16) dans ton cas).

    Sinon, pour le faire directement dans QxOrm, tu as 2 possibilités :

    1- de manière globale à tout ton projet en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QHash<QString, QString> * lstSqlType = qx::QxClassX::getAllSqlTypeByClassName();
    if (! lstSqlType) { qAssert(false); return; }
    lstSqlType->insert("QUuid", "VARBINARY(16)");
    2- ou bien de manière spécifique à une classe enregistrée dans le contexte QxOrm dans la fonction qx::register_class<T>() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template <>
    void register_class(QxClass<MyClass> & t)
    {
       qx::IxDataMember * pData = NULL;
       pData = t.data(& MyClass::m_myQUuidProperty, "myQUuidProperty");
       pData->setSqlType("VARBINARY(16)");
    }
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Etudiant EPITECH 5e année
    Inscrit en
    Octobre 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant EPITECH 5e année

    Informations forums :
    Inscription : Octobre 2014
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Merci !

    J'ai essayé ceci en effet, mais ça n'a pas l'air fonctionner comme ça le devrait. Je vais mettre un VARCHAR(36) pour ne pas avoir de surprise.

    Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/08/2012, 21h20
  2. Librairie d'utilisation des services MSN Messenger
    Par khayyam90 dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 23h10
  3. Réponses: 1
    Dernier message: 02/12/2010, 23h26
  4. Réponses: 8
    Dernier message: 27/07/2009, 12h06
  5. [Framework] Utilisation des services dans un controller
    Par Ylias dans le forum Spring
    Réponses: 2
    Dernier message: 08/06/2008, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo