Bonsoir,
Dans le cadre du projet ingénieur de mon école, je dois développer une espèce de simulateur. Les "outils" me sont imposés. Pour la modélisation physique je dois utiliser SMASH (VHDL-AMS), pour la 3D OpenGL, les fenêtres et le reste à l'aide de wxWidget.
L'application doit se présenter sous forme de dll, que le simulateur (SMASH) charge au démarrage (le simulateur propose une API pour réaliser cela).
Malgré la document assez pauvre de l'api du simulateur, j'ai réussi à réaliser la "connexion". Cependant lorsque j'inclus les headers wx les choses se gattent (ca doit faire 60-80 heures que je suis sur ce problème).
J'ai essayé de compiler en utilisant wxdevc++, Visual express 2005 et Code::Block.
Avec le compilateur GNU GCC (mingw c'est ca ?) :
Alors j'ai compilé wx avec mingw-make avec SHARED=0 et en testant UNICODE 1 et 0.
l'erreur que j'obtiens : C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/mingw32/bits/c++locale.h:72: error: `snprintf' is not a member of `std'
J'ai tenté en supprimant les #undef ... mais ca donne :
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 #if _GLIBCXX_USE_C99 #undef snprintf #undef vfscanf #undef vscanf #undef vsnprintf #undef vsscanf namespace __gnu_cxx { #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC extern "C" int (snprintf)(char * restrict, size_t, const char * restrict, ...); extern "C" int (vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list); extern "C" int (vscanf)(const char * restrict, __gnuc_va_list); extern "C" int (vsnprintf)(char * restrict, size_t, const char * restrict, __gnuc_va_list); extern "C" int (vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list); #endif #if !_GLIBCXX_USE_C99_DYNAMIC using ::snprintf; /* Erreur à cet endroit !! */ using ::vfscanf; using ::vscanf; using ::vsnprintf; using ::vsscanf; #endif } namespace std { using __gnu_cxx::snprintf; using __gnu_cxx::vfscanf; using __gnu_cxx::vscanf; using __gnu_cxx::vsnprintf; using __gnu_cxx::vsscanf; } #endif
`_CoCreateInstance@20'
..\..\..\..\..\..\biblio\c++\wxWidgets-2.8.10\lib\gcc_lib/libwxbase28.a(baselib_filename.o):filename.cpp.text+0x1da7): undefined reference to `_IID_IPersistFile'
Malheureusement je vois pas comment corriger cette erreur ...
le code source :
Tentative avec Visual c++ 2005
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 #include "windows.h" #include "smash_api.h" #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif void Load_Circuit(void *ioUnused) { SMASH_MessageOK("SMASH", " Erreur d'ouverture de circuit, veuillez charger le circuit 'Vehicule_brique.pat' "); } DLL_EXPORT void Register() { SMASH_HookAddCallback("on_post_load", Load_Circuit,NULL); }
j'ai bien entendu recompilé wx avec visual : avec beaucoup beaucoup d'efforts, ca compile mais l'application plante au moment d'ouvrir une fenêtre.
(je sais plus, mais il faut que je touche à d'autres réglages que l'unicode)
Si j'utilise les lib wx données par le simulateur :
0MyFrame@@QAE@ABVwxString@@ABVwxPoint@@ABVwxSize@@@Z)
main.obj : error LNK2001: symbole externe non résolu "int const wxEVT_COMMAND_MENU_SELECTED" (?wxEVT_COMMAND_MENU_SELECTED@@3HB)
main.obj : error LNK2001: symbole externe non résolu "int const wxEVT_NULL" (?wxEVT_NULL@@3HB)
bin\Release\test7_cb_vs.dll : fatal error LNK1120: 7 externes non résolus
le source :
Pour le problème, je pense qu'il y a des différences de versions. Peut être aussi que j'insère les lib dans le mauvais ordre ...
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 #include "windows.h" #include "smash_api.h" #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; enum { ID_Quit = 1, ID_About, }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) END_EVENT_TABLE() MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, _T("&About...") ); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, _T("E&xit") ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, _T("&File") ); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText( _T("Welcome to wxWindows!") ); } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(TRUE); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox(_T("This is a wxWindows Hello world sample"), _T("About Hello World"), wxOK | wxICON_INFORMATION, this); } void Load_Circuit(void *ioUnused) { SMASH_MessageOK("SMASH", " Erreur d'ouverture de circuit, veuillez charger le circuit 'Vehicule_brique.pat' "); MyFrame *frame = new MyFrame( _T("Hello World"), wxPoint(50,50), wxSize(450,340) ); frame->Show(TRUE); } DLL_EXPORT void Register() { SMASH_HookAddCallback("on_post_load", Load_Circuit,NULL); }
Bref, je voulais surtout savoir si vous saviez le pourquoi d'une des erreurs, et peut être aussi avoir des conseils pour savoir comment procéder.
Merci de votre aide
Partager