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

C# Discussion :

problem com interop multithread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut problem com interop multithread
    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 marche lisez 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 :
    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));
           }
        }
     
     
    }
    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...

    OBJECTIF :
    Pouvoir ouvrir une Dlg indépendante de mon script, que DisplayDlg(), rende la main immediatement.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    J'ai fini par trouver en créant un projet console c# qui utilise ma DLL.
    C'est un controle ActiveX (Shockwave Object) dans Ma Dlg qui refusait de s'initialiser parceque mon thread n'etait pas cloisonné STA...

    Il ne me reste plus qu'à comprendre ce que tout cela signifi...

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

Discussions similaires

  1. [C#] Comment deployer un COM Interop ?
    Par loverdose dans le forum C#
    Réponses: 12
    Dernier message: 27/04/2012, 12h01
  2. Probleme Client / Server multithread
    Par hakuryu dans le forum C#
    Réponses: 1
    Dernier message: 15/02/2008, 13h11
  3. COM Interop Excel
    Par Piet dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 01/02/2008, 23h53
  4. Probleme Com en VB
    Par iceman77100 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/11/2007, 18h08
  5. Réponses: 6
    Dernier message: 30/03/2006, 15h15

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