Bonjour � tous.
J'aimerai faire en C++ (non manag�) une chose que je fais en C# :
Je g�n�re du code (une classe par exemple), puis j'utilise un objet qui permet d'invoquer le compilateur C#, ca me fait une DLL que je charge aussitot dans le process, un petit coup de reflexion et hop la nouvelle classe s'int�gre � l'application.
Seulement voila, je ne me voit pas trop distribuer tout un compilo avec mon programme. Donc j'ai cherch� un compilateur "int�grable" mais je n'ai rien trouv�...
R�sultat je me dis que je ne vais pas avoir le choix, je dois distribuer un compilo avec ou du moins permettre a l'utilisateur de sp�cifi� le compilo install� sur sa machine.
Seulement voila, j'ai ou�e dire qu'il n'est pas bon de mixer les compilos (en gros il faudrait que la compilation a la vol�e utilise le m�me compilo que celui qui a servit � compiler l'application).
Dans quelle mesure c'est impactant ?
Sinon j'ai fais un premier jet avec le compilo de Visual Studio 2010 Ultimate, mais ca gauffre violemment dans la fonction CreateProcess. Il me dit qu'il y a une exception non g�r�e, violation d'acc�s lors de l'�criture, et le d�bogueur m'am�ne dans le fichier dbgheap.c, ligne 239. Je capte pas comment ca se fait.
Le code utilis� est le suivant :
Code cpp : 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 #include <iostream> #include <fstream> #include <windows.h> int main(int argc, wchar_t* argv[]) { // Création d'un fichier source std::ofstream file("test.cpp", std::ios::out); if(!file) { std::cerr << "Impossible d'ouvrir le fichier test.cpp" << std::endl; return -1; } file << "#include <iostream>" << std::endl; file << "void hello() { std::cout << \"hello !\" << std::endl; }" << std::endl; file.close(); STARTUPINFO siStartupInfo; PROCESS_INFORMATION piProcessInfo; memset(&siStartupInfo, 0, sizeof(siStartupInfo)); memset(&piProcessInfo, 0, sizeof(piProcessInfo)); siStartupInfo.cb = sizeof(siStartupInfo); wchar_t* env[2]; env[0] = L"PATH=%PATH%;D:\\softs\\Microsoft Visual Studio 2010\\Common7\\IDE"; env[1] = 0; int result = CreateProcess(0, L"D:\\softs\\Microsoft\\ Visual\\ Studio\\ 2010\\VC\\bin\\cl.exe /EHsc test.cpp", 0, 0, FALSE, CREATE_DEFAULT_ERROR_MODE, 0, L"D:\\programmation\\projects\\dynamic_compil\\dynamic_compil", &siStartupInfo, &piProcessInfo); if(!result) { std::cerr << GetLastError() << std::endl; } return 0; }
Merci de votre aide![]()
Partager