wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Appel de projet avec un simple new !
Conversation : Appel de projet avec un simple new !
04-05-2009 09:58:08  Appel de projet avec un simple new ! #1
k3nrdx (Membre)
Inscrit le : 06-03-2009
Messages: 19
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour,

J’ai un service RPC écrit en C qui tourne sur ma machine.
A la réception du message INIT il fait un new de la classe principal de mon projet wxWidgets.
La partie RPC est figé,  je ne peux rien faire dedans.

Tout les projets wxWidgets que j’ai vu jusqu’a maintenant  utilisent  un IMPLEMENT_APP(…) et une methode OnInit () de cette façon je ne pe pas appeler mon projet avec un simple new.

Comment faut’il faire pour  appeler mon projet wxWidgets a partir d’un code en C/C++ standard, avec un seul new.

Merci d'avance.
04-05-2009 10:36:47  Re: Appel de projet avec un simple new ! #2
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 216
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
Peut être avec:
wxEntryStart

et pour détruire l'instance de l'application :
wxEntryCleanup

Dernière modification par Gandi (04-05-2009 10:37:22)


"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
04-05-2009 11:48:45  Re: Appel de projet avec un simple new ! #3
k3nrdx (Membre)
Inscrit le : 06-03-2009
Messages: 19
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour Gandi,

Comment tu utilise cette méthode ?
Faut'il gardé le IMPLEMENT_APP ?

Merci.
04-05-2009 12:30:30  Re: Appel de projet avec un simple new ! #4
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 216
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
laisse moi deviner, ta vite regardé le lien, tu t'es dit quesque c'est que ce truc, je vais demander il dois savoir.
Bein même si je le sais, faut se bouger un peu les neurones et taquiner google, voir comment est défini IMPLEMENT_APP etc... Je donne la piste à toi de trouver ou de faire évoluer le problème. On est pas là pour coder à votre place.

"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
04-05-2009 13:54:56  Re: Appel de projet avec un simple new ! #5
k3nrdx (Membre)
Inscrit le : 06-03-2009
Messages: 19
Snippets: 0
Tutoriels: 0
Hors ligne
Non pas du tout, j'ai fait des  tests mais j'ai l'erreur:
LNK2019: symbole externe non résolu _main qui revient souvent, c'est pour ça que j'ai demandé pour IMPLEMENT_APP.

C'est facile de balancer des noms de fonction sans savoir a quoi elle servent, si je te pose la question c'est que je pensé que tu l'avais déjà utilisé. Je pense que wxEntryStart ne résout pas mon problème, car c'est elle qui appel l'init de l'environnement wxWidgets or, dans mon cas l'init ce fait par un new. Je cherche encore, si quelqu'un a déjà rencontrer ce problème, n'hésitez pas ! mci
04-05-2009 14:39:33  Re: Appel de projet avec un simple new ! #6
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 216
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
Pour IMPLEMENT_APP non tu dois pas l'utiliser si tu utilise wxEntry, puisque si on regarde la définition de IMPLEMENT_APP, "wx\msw\app.h" ligne 137 on voit :

Code wxWidgets:

 
    extern "C" int WINAPI WinMain(HINSTANCE hInstance,                    \
                                  HINSTANCE hPrevInstance,                \
                                  wxCmdLineArgType lpCmdLine,             \
                                  int nCmdShow)                           \
    {                                                                     \
        return wxEntry(hInstance, hPrevInstance, lpCmdLine, nCmdShow);    \
    }     
 

De toute manière on ne peut avoir qu'une instance de wxApp.

Code wxWidgets:

 
wxApp::GetInstance()
 

Donc si tu veux plusieurs applications va falloir passer par des messages windows ou l'équivalent sur un autre système.
Sinon faut faire plusieurs Frames.

Code wxWidgets:

MyMotherFrame* MyApp::NewMotherFrame()
{
  return new MyMotherFrame();
}


Ou peut être tenter un truc plus dangereux en espérant que wxEntry ne détruit pas l'ancienne instance et que OnExit() ne fait pas de dégats sur les autres instances de wxApp, de plus il faudrait avoir une fonction qui permet d'obtenir une nouvelle HINSTANCE hInstance.

Code wxWidgets:

 
MyApp* NewApp( HINSTANCE hInstance )
{
  wxEntry( hInstance , 0, NULL, 0, false );
  return wx_static_cast(MyApp*, wxApp::GetInstance());
}
 
void DeleteApp( MyApp* aApp )
{
  aApp->OnExit();
}
 

Dernière modification par Gandi (04-05-2009 15:14:37)


"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
07-05-2009 11:38:45  Re: Appel de projet avec un simple new ! #7
k3nrdx (Membre)
Inscrit le : 06-03-2009
Messages: 19
Snippets: 0
Tutoriels: 0
Hors ligne
Faire plusieurs frame n'est pas une bonne chose, je pense que je vais harmoniser mon projet en wxWidgets. Faut que je crée un .lib si vous avez des lien pour ça n"hésiter pas. Merci.
07-05-2009 14:56:13  Re: Appel de projet avec un simple new ! #8
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 216
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
Pour ce qui est plugin tu as ça :
http:/x.psoud.free.fr/index.php?mod=art … &id=16

Sinon pourquoi , la solution de plusieurs Frames, serait une mauvaise chose ? Car pour moi c'est ce qu'il y aurait de plus saint.

Dernière modification par Gandi (07-05-2009 14:56:57)


"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
13-05-2009 12:32:16  Re: Appel de projet avec un simple new ! #9
k3nrdx (Membre)
Inscrit le : 06-03-2009
Messages: 19
Snippets: 0
Tutoriels: 0
Hors ligne
Oui en effet tu a raison, la solution avec plusieurs frames revient naturellement. Je n’arrive pas bien a savoir comment appelé ma deuxième frame.

La première frame est le serveur XML-RPC qui attend une commande d'initialisation, qui lancera la deuxième frame qui sous forme de DLL.

Quand la commande d’init arrive sur le serveur xml-rpc je fais un new de ma deuxième frame,  mais tout n’est pas bien initialisé, mes files de messages ne sont pas accessible. J’ai testé avec un wxTimer et je ne récupérer pas l’événement.
Mon serveur RPC lancer mon appli principal comme suit :

Code:

 
wxMonLogiciel *mainLogiciel = new wxMonLogiciel ( "WX_Logiciel ", wxPoint(50,50), wxSize(450,340) );      
    mainLogiciel->Show(true);
 

La fenêtre na pas le temps de s’ouvrir que le serveur RPC recommence à attendre une commande et, bloque la fenêtre.

Question de débutant :
Alors j’ai mon serveur RPC qui est un projet wxWidgets avec un héritage sur wxApp et mon logiciel principal qui est aussi un projet wxWidgets avec un héritage de wxApp mais compiler sous forme de Dll, Si j’utilise wxEntryStart il ne va pas y avoir de conflit entre les deux applications ?

je me sers de la file principal de message pour manager les evenements de mon projet, cette file est presente dans la deuxieme frame, comment faire avec deux projet wxwidgets ?
----------
Hello, je reviens a mon probleme de base a savoir l'appel de l'instance du projet wxwidgets sans passé par les macro IMPLEMENT_APP.

Voici mon code de base.

Code wxWidgets:

IMPLEMENT_APP(wx_TurbineApp);
 
 
bool wx_TurbineApp::OnInit()
{
    wx_ConsoleMain *frame = new wx_ConsoleMain( "WX_TurbineApp", wxPoint(50,50), wxSize(450,340) );      
    frame->Show(true);
    SetTopWindow(frame);
 
    return true;
}


L'instance de la classe principale doit ce faire a l'aide d'une Dll a l'appel de la methode Init.
Je dois donc utilisé wxEntryStart() dans ma methode Init() pour instancié 'manuellement' mon projet wxçTurbineApp.

J'ai chercher sur le net mais j'ai pas trouver d'exemple concrét, je ne sais pas comment appel l'instance avec wxEntryStart.

Code Cpp:

 Init()
{
//Appel de wx_TurbineApp
...
}
 


Merci d'avance.
----------
J'ai finalement utiliser ce code:

Code wxWidgets:

 
Init()
{
wxApp* pApp = new wx_TurbineApp();
wxApp::SetInstance(pApp);
pApp->CallOnInit();
}
 


Ce code appel bien mon OnInit, mais je ne pense pas que ça initialise correctement mon programme car je n'arrive pas a récupérer l'wxEvtHandler de mon wxApp dans wx_ConsoleMain(), jDéprim x!

Dernière modification par k3nrdx (25-05-2009 18:09:58)

26-05-2009 10:23:32  Re: Appel de projet avec un simple new ! #10
Gandi (Gourou de la secte)
Lieu: Clermont-Ferrand
Inscrit le : 10-10-2007
Messages: 216
Snippets: 5
Tutoriels: 0
Site web
Hors ligne
Comment essais tu de récupérer le wxEvthandler ?

"Les ordinateurs ne remplaceront jamais les livres. Vous ne pouvez pas vous mettre sur une pile de disquettes pour atteindre le haut de votre armoire" ( Sam Ewing )
28-05-2009 08:59:06  Re: Appel de projet avec un simple new ! #11
k3nrdx (Membre)
Inscrit le : 06-03-2009
Messages: 19
Snippets: 0
Tutoriels: 0
Hors ligne
Salut Gandi,

Comment essais tu de récupérer le wxEvthandler ?
Quand je crée mon ConsoleMain dans le OnInit, wxEvthandler est récupérer de façon implicite je pense.

Voila j'ai trouvé mon précieux ! Quand on est dans le cas d'une Dll ou en mode console, qu'on passe pas par IMPLEMENT_APP() il est indispensable d'utiliser :

Code:

// initialisation des wxwidget
    wxInitializer initiliazer;

...pour initialiser la librairie.
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Appel de projet avec un simple new !