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

wxWidgets Discussion :

Passage de la 2.6.3 à la 2.8.10


Sujet :

wxWidgets

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 51
    Points
    51
    Par défaut Passage de la 2.6.3 à la 2.8.10
    bonjour,

    passant de la version, 2.6.3 a la version 2.8.10 et ayant résollu quelques difficultés de compréhension des differentes configuration non unicode <-//-> unicode (merci 3DArchi ),
    j'essaye de faire migrer un vieil exemple d'appel à une DLL wxWidgets

    Je me retrouve avec une erreur de compilation
    c:\dllcaller\wxdll\wxdll.cpp(34) : error C3861: 'wxSetInstance'*: identificateur introuvable
    je ne trouve nulle part reference à cette fonction, ni dans l'aide wxWidgets.chm de 2.6.3 ni dans celle de 2.8.10

    Voici le code complet de la DLL
    // wxDll.cpp : Defines the entry point for the DLL application.

    #include "stdafx.h"

    // wxDLL is a simple DLL which demonstrates how to use
    // wxWindows in a DLL which is called from another
    // application (not using wxWindows)

    // Edited by upCASE

    #include "wx/wx.h"

    #include "wxDLL.h"
    #include "wx/wxhtml.h"

    // We use IMPLEMENT_APP_NO_MAIN so we can start the app from DllMain
    // as we don't have a WinMain or main entry point
    //
    BEGIN_EVENT_TABLE(wxDLLApp, wxApp)
    EVT_BUTTON(123,wxDLLApp::OnButton)
    END_EVENT_TABLE()

    IMPLEMENT_APP_NO_MAIN(wxDLLApp)

    BOOL APIENTRY DllMain( HANDLE hModule,
    DWORD ul_reason_for_call,
    LPVOID lpReserved
    )
    {
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    { //use wxInitialize() if you don't want GUI instead of the following 12 lines
    wxSetInstance((HINSTANCE)hModule);
    int argc = 0;
    char **argv = NULL;
    wxEntryStart(argc, argv);
    if ( !wxTheApp || !wxTheApp->CallOnInit() )
    return FALSE;
    }
    break;

    case DLL_THREAD_ATTACH:
    break;

    case DLL_THREAD_DETACH:
    break;

    case DLL_PROCESS_DETACH:
    wxEntryCleanup(); //use wxUninitialize() if you don't want GUI
    break;
    }
    return TRUE;
    }

    // extern "C" so we don't need a DEF file

    // This is the function to be called from the host app
    extern "C" DLLFUNCTIONS_API void DLLFunction(HWND handle)
    {
    // Create a dummy wxWindow so we can use the HWND passed from the
    // host application

    wxWindow win;
    win.SetHWND((WXHWND)handle);
    win.Enable(false);

    wxDialog dlg(&win, -1, "wxDialog in DLL", wxDefaultPosition, wxSize(150,150));
    wxButton b(&dlg, 123,"Press me please");
    dlg.ShowModal();

    // Clean up else the caller can't use its window
    win.Enable(true);
    win.SetHWND(0);
    }

    extern "C" DLLFUNCTIONS_API void TestReport(HWND handle, char * msg)
    {
    wxWindow win;

    win.SetHWND((WXHWND)handle);
    win.Enable(false);

    wxDialog dlg(&win, wxID_ANY, wxString(msg), wxDefaultPosition, wxSize(400,180));

    wxHtmlWindow html1(&dlg,wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER);
    html1.SetPage("<html><body>"
    "<h1>" "About" "</h1>"
    "Some error occurred Smile :-)"
    "</body></hmtl>");

    dlg.ShowModal();

    // Clean up else the caller can't use its window
    win.Enable(true);
    win.SetHWND(0);
    }

    bool wxDLLApp::OnInit()
    {
    return true;
    }
    void wxDLLApp::OnButton(wxCommandEvent& evt)
    {
    wxMessageBox("You really did it.... I don't believe it!");
    }
    Pourquoi cel ne fonctionne t il plus ?
    Existe t il un exemple plus recent ?
    Est il opportun de changer de version ?

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Apparemment la façon de faire à changer. Cf ici.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    salut 3DArchi,
    j'espère que tu a passé un bon week end

    bonjour à tous,

    Une bien meilleure réponse ici avec un exemple complet et didactique

    Avec cet exemple, mes configuations 'XP & wxWidgets2.8.10 & UNICODE' fonctionnent
    avec encore de nombreux 'Warnings' pour tout ce qui est en 'vc_dll'
    c:\microsoft\wxwidgets-2.8.10\include\wx\dynarray.h(810) : warning C4251: 'std::_Vector_val<_Ty,_Alloc>::_Alval'*: class 'std::allocator<_Ty>' nécessite une interface DLL pour être utilisé(e) par les clients de class 'std::_Vector_val<_Ty,_Alloc>'
    je mentionne les lignes de commandes de complilation et d'edition des liens en infra du message

    seule les configurations 'vc_lib & UNICODE & debug & release' sont complètement propres

    concernant les configurations 'XP & wxWidgets2.8.10 & ASCII', j'obtiens toujours les même erreurs, que ce soit pour du 'release' versus 'debug' ou 'vc_lib' versus 'vc_dll' :
    LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRT' et les autres bibliothèques*; utilisez /NODEFAULTLIB:library
    dllMain.obj : error LNK2001: symbole externe non résolu "public: virtual bool __thiscall wxApp::Initialize(int &,wchar_t * *)" (?Initialize@wxApp@@UAE_NAAHPAPA_W@Z)
    minimalWx.obj : error LNK2001: symbole externe non résolu "wchar_t const * const wxStatusLineNameStr" (?wxStatusLineNameStr@@3QB_WB)
    minimalWx.obj : error LNK2001: symbole externe non résolu "public: static class wxString __cdecl wxString::Format(wchar_t const *,...)" (?Format@wxString@@SA?AV1@PB_WZZ)
    minimalWx.obj : error LNK2001: symbole externe non résolu "wchar_t const * const wxFrameNameStr" (?wxFrameNameStr@@3QB_WB)
    et pour les configurations 'vc_dll & ASCII', je retrouve les meme 'warnings' que pour les configurations UNICODE.

    je reste donc sur cette difficulté : sur ma machine 'XP & VC9 & wxWidgets2.8.10',
    je n'arrive pas à manipuler des configurations 'vc_lib' versus 'vc_dll'

    d'une manière similaire, et en reprenant mon vieux projet 'XP & VC9 & wxWidgets2.6.3',
    j'ai une configuration ASCII qui fonctionne à merveille dans toutes ses digressions 'debug' versus 'r'elease' et 'vc_lib' versus 'vc_dll', mais pour l'instant impossible d'y faire vivre une configuration UNICODE en parallèle

    Je n'imagine pas qu'une configuration ASCII soit incompatible avec sa consoeur UNICODE sur une meme machine

    au plaisir de vos analyses des messages d'erreurs, de vos idées et de vos expériences

    Cordialement
    ----------------------------------------------------
    lignes de commandes :
    compilation 'vc_dll & unicode & debug'
    /Od /I "c:\microsoft\wxWidgets-2.8.10\include" /I "c:\microsoft\wxWidgets-2.8.10\lib\vc_dll\mswud" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WXMSW__" /D "WXUSINGDLL" /D "__WXDEBUG__" /D "MINIMALWX_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yc"stdafx.h" /Fp"Dll Unicode Debug\wxWidgets28dll.pch" /Fo"Dll Unicode Debug\\" /Fd"Dll Unicode Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt
    edition des liens 'vc_dll & unicode & debug'
    /OUT:"C:\Calc_pcc\ACReseau\VC9\DllCaller\Dll Unicode Debug\wxWidgets28dll.dll" /INCREMENTAL /NOLOGO /LIBPATH:"c:\microsoft\wxWidgets-2.8.10\lib\vc_dll" /DLL /MANIFEST /MANIFESTFILE:"Dll Unicode Debug\wxWidgets28dll.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"c:\Calc_pcc\ACReseau\VC9\DllCaller\Dll Unicode Debug\wxWidgets28dll.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT wxbase28ud.lib wxbase28ud_net.lib wxbase28ud_odbc.lib wxbase28ud_xml.lib wxexpatd.lib wxjpegd.lib wxmsw28ud_adv.lib wxmsw28ud_aui.lib wxmsw28ud_core.lib wxmsw28ud_dbgrid.lib wxmsw28ud_gl.lib wxmsw28ud_html.lib wxmsw28ud_media.lib wxmsw28ud_qa.lib wxmsw28ud_richtext.lib wxmsw28ud_xrc.lib wxpngd.lib wxregexd.lib wxtiffd.lib wxzlibd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
    ---------------------------------------------------
    lignes de commandes :
    compilation 'vc_lib & ASCII & debug'
    /Od /I "c:\microsoft\wxWidgets-2.8.10\include" /I "c:\microsoft\wxWidgets-2.8.10\lib\vc_lib\mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WXMSW__" /D "__WXDEBUG__" /D "MINIMALWX_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yc"stdafx.h" /Fp"Debug\wxWidgets28dll.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt
    edition des liens 'vc_lib & ASCII & debug'
    /OUT:"C:\Calc_pcc\ACReseau\VC9\DllCaller\Debug\wxWidgets28dll.dll" /INCREMENTAL /NOLOGO /LIBPATH:"c:\microsoft\wxWidgets-2.8.10\lib\vc_lib" /DLL /MANIFEST /MANIFESTFILE:"Debug\wxWidgets28dll.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Calc_pcc\ACReseau\VC9\DllCaller\Debug\wxWidgets28dll.pdb" /MAP:"C:\Calc_pcc\ACReseau\VC9\DllCaller\Debug\wxWidgets28dll.map" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT wxbase28d.lib wxbase28d_net.lib wxbase28d_odbc.lib wxbase28d_xml.lib wxexpatd.lib wxjpegd.lib wxmsw28d_adv.lib wxmsw28d_aui.lib wxmsw28d_core.lib wxmsw28d_dbgrid.lib wxmsw28d_gl.lib wxmsw28d_html.lib wxmsw28d_media.lib wxmsw28d_qa.lib wxmsw28d_richtext.lib wxmsw28d_xrc.lib wxpngd.lib wxregexd.lib wxtiffd.lib wxzlibd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par carreau Voir le message
    salut 3DArchi,
    j'espère que tu a passé un bon week end
    un peu venteux peut être
    Citation Envoyé par carreau Voir le message
    avec encore de nombreux 'Warnings' pour tout ce qui est en 'vc_dll'
    c:\microsoft\wxwidgets-2.8.10\include\wx\dynarray.h(810) : warning C4251: 'std::_Vector_val<_Ty,_Alloc>::_Alval'*: class 'std::allocator<_Ty>' nécessite une interface DLL pour être utilisé(e) par les clients de class 'std::_Vector_val<_Ty,_Alloc>'
    Si une DLL expose dans son interface des éléments de la STL (en fait des classes templates), il faut que l'utilisateur de la DLL compile avec la même version de la STL (ou des templates) que celle utilisée par la DLL. Sinon, boum C'est pour ça que le compilateur sort ces warnings.
    Citation Envoyé par carreau Voir le message
    concernant les configurations 'XP & wxWidgets2.8.10 & ASCII', j'obtiens toujours les même erreurs, que ce soit pour du 'release' versus 'debug' ou 'vc_lib' versus 'vc_dll' :
    LINK : warning LNK4098: conflit entre la bibliothèque par défaut 'MSVCRT' et les autres bibliothèques*; utilisez /NODEFAULTLIB:library
    dllMain.obj : error LNK2001: symbole externe non résolu "public: virtual bool __thiscall wxApp::Initialize(int &,wchar_t * *)" (?Initialize@wxApp@@UAE_NAAHPAPA_W@Z)
    minimalWx.obj : error LNK2001: symbole externe non résolu "wchar_t const * const wxStatusLineNameStr" (?wxStatusLineNameStr@@3QB_WB)
    minimalWx.obj : error LNK2001: symbole externe non résolu "public: static class wxString __cdecl wxString::Format(wchar_t const *,...)" (?Format@wxString@@SA?AV1@PB_WZZ)
    minimalWx.obj : error LNK2001: symbole externe non résolu "wchar_t const * const wxFrameNameStr" (?wxFrameNameStr@@3QB_WB)
    ASCII dans le projet + wchar_t dans les erreurs == réflexe pavlovien => encore un conflit UNICODE/NON UNICODE
    Citation Envoyé par carreau Voir le message
    /Od /I "c:\microsoft\wxWidgets-2.8.10\include" /I "c:\microsoft\wxWidgets-2.8.10\lib\vc_lib\mswd" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "__WXMSW__" /D "__WXDEBUG__" /D "MINIMALWX_EXPORTS" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Yc"stdafx.h" /Fp"Debug\wxWidgets28dll.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt
    /I "c:\microsoft\wxWidgets-2.8.10\include" et /I "c:\microsoft\wxWidgets-2.8.10\lib\vc_lib\mswd" devraient être inversés (surtout s'il existe un setup.h dans \wxWidgets-2.8.10\include et un rcdef.h dans \wxWidgets-2.8.10\include\msw).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    bonsoir 3DArchi,

    concernant les versions de la STL dans l'interface des DLL :
    Si une DLL expose dans son interface des éléments de la STL (en fait des classes templates), il faut que l'utilisateur de la DLL compile avec la même version de la STL (ou des templates) que celle utilisée par la DLL. Sinon, boum C'est pour ça que le compilateur sort ces warnings.
    je ne comprends pas comment il pourrait y avoir deux versions différentes de la STL dans le même environnement et du coup comment corriger la présence de tous ces 'warnings'
    Je constate que, dans VC9, l'utilisateur peut soit utiliser les MFC soit utiliser la STL (cf. miniature)
    Je lis sur le net que les MFC ne sont pas disponibles dans la version Express de VC9 et que STL et CLR (Windows form) sont dans le même paquet
    Je ne comprends pas pourquoi d'un point de vue "théorique" STL et MFC sont exclusifs mais j'imagine que MFC et CLR ne fassent pas bon ménage bien qu'il y ait des indications dans l'aide pour faire cohabiter les deux.

    concernant l'ordre des répertoires d'inclusion
    /I "c:\microsoft\wxWidgets-2.8.10\include" et /I "c:\microsoft\wxWidgets-2.8.10\lib\vc_lib\mswd" devraient être inversés (surtout s'il existe un setup.h dans \wxWidgets-2.8.10\include et un rcdef.h dans \wxWidgets-2.8.10\include\msw).
    j'ai bien lu que l'ordre est primordial pour Code::Blocks et je lis dans ton tutoriel et constate que VisualStudio 2008 s'en sort quel que soit l'ordre.

    bonne soirée

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par carreau Voir le message
    je ne comprends pas comment il pourrait y avoir deux versions différentes de la STL dans le même environnement
    Maj du compilateur. Un compilo pour la DLL, un pour le projet. Maj de la STL. Utilisations d'un port STL particulier pour la DLL ou pour le projet. En fait, il y a beaucoup de (improbables) raisons.
    Citation Envoyé par carreau Voir le message
    Je lis sur le net que les MFC ne sont pas disponibles dans la version Express
    Oui. Les MFC ne sont que dans les versions payantes.
    Citation Envoyé par carreau Voir le message
    STL et CLR sont dans le même paquet
    un port de la STL (CLR n'a rien à voir) est fourni avec quasiment tous les compilateurs C++.
    Citation Envoyé par carreau Voir le message
    Je ne comprends pas pourquoi d'un point de vue "théorique" que STL et MFC sont exclusifs
    Ils ne le sont pas. On peut mélanger (allègrement ou presque) STL et MFC. Mais pourquoi ces questions sur les MFC ?
    Citation Envoyé par carreau Voir le message
    concernant l'ordre des répertoires d'inclusion

    j'ai bien lu que l'ordre est primordial pour Code::Blocks et je constate que VisualStudio 2008 s'en sort quel que soit l'ordre.
    Je pense que tu as mélangé 2 choses :
    -> l'ordre des bibliothèques pour le link n'est pas important avec Visual mais est primordial pour MinGW/gcc (+ Code::block)
    -> L'ordre des répertoires de recherche est important pour les 2 compilateurs car : lorsqu'il y a #include <setup.h>. Le compilateur cherche dans quel répertoire se trouve le fichier et s'arrête dès qu'il l'a trouvé. Donc si tu as un setup.h dans "c:\microsoft\wxWidgets-2.8.10\include" et un dans "c:\microsoft\wxWidgets-2.8.10\lib\vc_lib\mswd", selon l'ordre spécifié dans la ligne de commande, le fichier inclus ne sera pas le même.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Points : 51
    Points
    51
    Par défaut
    en ouvrant les setup.h je comprends que "C:\Microsoft\wxWidgets-2.8.10\lib\vc_lib\mswd\wx\setup.h" sert à fixer les valeurs des constantes du preprocesseur selon les configurations et que "C:\Microsoft\wxWidgets-2.8.10\include\msvc\wx\setup.h" précise les directives et fichiers à employer pour toutes les configurations
    du coup je ne comprends pas pourquoi il faudrait exclure celui ci au profit de celui là et quelles sont les interactions avec les directives explicitées dans les fenetres de propriétés du projet, notamment si les valeurs des constantes sont contradictoires
    et je ne comprends pas les interactions avec les repertoires d'inclusions des propriétés du projet

    enfin bref, pour résumer, je te remercie de ton aide : j'ai maintenant un projet correctement paramétré

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39
  3. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15
  4. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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