Bonjour la communauté
J'ai créé une DLL en C# que j'ai rendu com interrop (ne riez pas, je débarque, tout est tres flou pour l'instant).
J'appelle les fonctions de ma dll depuis des scripts en pascal (Inno Setup).
Jusque la, pas de probleme, ca marche.
N.B : A ce propot, si vous voulez des pistes pour savoir comment faire, sans comprendre comment ca marchelisez mon article dispo ici
Mon probleme : des que je tente de lancer un thread dans ma Dll, le programme crash, et je n'arrive pas a obtenir la moindre information type message d'exception ou autre...
Explication par l'exemple :
Code qui fonctionne :
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 namespace TestGiovaDlgOCX { public interface I_Start { void DisplayDlg(string str); } [ComVisible(true)] public class C_Start : I_Start { private Thread DlgThread; [ComVisible(true)] public void DisplayDlg(string str) { this.DlgThread = new Thread(new ThreadStart(this.LaunchDlg)); LaunchDlg(); } void LaunchDlg() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1(this)); } } }
Code qui plante :
Voila, je tourne plutot en rond, et ne sais pas où chercher, où aller... J'ai lu un article qui (en 2 lignes) parlait de mode libre et cloisonné, il semblerait que mon script pascal utilise ma dll en mode cloisonné, mais je ne sais pas quoi faire, faut dire ma marge de maneuvre coté pascal est hyper restrainte, tres peu de fonction dispo. Sans parler du fait que je n'arrive pas à lancer ma Dll en mode debug pour obtenir des infos, ni remonter l'exception, c'est la loose quoi...
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 namespace TestGiovaDlgOCX { public interface I_Start { void DisplayDlg(string str); } [ComVisible(true)] public class C_Start : I_Start { private Thread DlgThread; [ComVisible(true)] public void DisplayDlg(string str) { this.DlgThread = new Thread(new ThreadStart(this.LaunchDlg)); try { this.DlgThread.Start(); } catch (Exception e) { MessageBox.Show(e.Message); } } void LaunchDlg() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1(this)); } } }
OBJECTIF :
Pouvoir ouvrir une Dlg indépendante de mon script, que DisplayDlg(), rende la main immediatement.
Partager