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 :

C# dll 32b ou 64b


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Metallier
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Metallier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut C# dll 32b ou 64b
    Bonjour,

    Je suis un utilisateur de Solidworks, un logiciel de modélisation 3d dans lequel j'ai la possibilité de développer des macros en VB via Visual Basic For Application (VBA) qui fonctionne en 32b.
    Cette année, la nouvelle version de Solidworks propose Visual Studio Tools For Application à la place de Visual Basic For Application (VSTA) qui elle accepte le 32b et 64b.
    Je suis en train de développer une dll en C# avec Visual C# Express pour étendre les possibilités de mes macros.
    Pour pouvoir référencer ma DLL dans VBA ou VSTA, je coche les options "Rendre l'assembly visible par COM" et "Inscrire pour COM Interop"

    Mon problème est le suivant :
    Je compile la DLL sur mon système en 32b, je la référence dans VBA, tout fonctionne.
    Sur mon système 64b, je fais de même. La compilation se passe bien, le référencement dans VSTA aussi.
    Par contre, je n'arrive pas à renvoyer d'objet Solidworks via ma DLL.
    Je peux creer des objets SW, je peux creer des objets de ma DLL mais je ne peux pas renvoyer d'objets SW via une méthode de ma DLL.
    J'ai à chaque fois l'erreur suivante :
    Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))

    J'ai l'impression que mon pb vient des références vers mes objets crée dans ma DLL.

    Un exemple vaut mieux qu'un long discours :

    La macro VBA/VSTA 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
     
    Sub Main()
        'Objet de ma DLL
        Dim SldWks As ExtSldWorks
        Dim Modele As ExtModele
     
        Set SldWks = New ExtSldWorks
        SldWks.Init Application.SldWorks
        'Ici comme j'ai initialisé ma variable SldWks avec l'application,
        'je veux que ma DLL initialise et me renvoi directement un objet ExtModele
        Set Modele = SldWks.Modele
     
    End Sub
    Etrangement, cette version de ma macro fonctionne puisque ma DLL ne me retourne aucune référence d'objet crée à l’intérieur de ma DLL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Main()
        Dim Sw      As SldWorks.SldWorks
        'Objet de ma DLL
        Dim SldWks As ExtSldWorks
        Dim Modele As ExtModele
     
        Set Sw = Application.SldWorks
        Set SldWks = New ExtSldWorks
        SldWks.Init Application.SldWorks
        Set Modele = New ExtModele
        Modele.Init Sw.ActiveDoc, SldWks
     
    End Sub

    Voici le code C# de ma méthode ExtSldWorks.Modele
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public ExtModele Modele()
            {
                ExtModele pModele = new ExtModele();
     
                pModele.Init(_swSW.ActiveDoc(), this);
     
                return pModele;
            }
    et le code de la méthode ExtModele.Init
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Boolean Init(ModelDoc2 ModeleDoc, ExtSldWorks Sw)
            {
     
                if (!((ModeleDoc.Equals(null)) && (Sw.Equals(null))))
                {
                    _swModele = ModeleDoc;
                    _SW = Sw;
     
                    return true;
                }
                return false;
            }
    Ça fait plusieurs jours que je me gratte les cheveux mais je n'ai pas trouvé de solutions. J'ai lu que COM fonctionne toujours en 32b, comment se passe les interactions avec les apps 64b ? Est ce à la compilation que le pb se pose ? Après quelques recherches sur le net, j'ai essayer de passer la compilation de mon projet C# de anyCPU à x86 mais sans succès ?

    Une idée pour m'aider svp ?

  2. #2
    Candidat au Club
    Homme Profil pro
    Metallier
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Metallier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Au final, je viens de trouver. Une sombre erreur de parenthèse.

    J'ai pris une propriété pour une méthode

    J'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pModele.Init(_swSW.ActiveDoc(), this);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pModele.Init(_swSW.ActiveDoc, this);
    Ce que je n'ai pas compris, c'est que Visual Studio ne m'indiquait pas d'erreur ni en édition, ni à la compilation.

    Donc résolu.

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

Discussions similaires

  1. Savoir quelle version de windows (XP, Seven 32b, Seven 64b)
    Par Jean-Pierre49 dans le forum Contribuez
    Réponses: 4
    Dernier message: 17/06/2017, 16h58
  2. [XL-2013] compatibilité excel 2013 32b et 64b
    Par astrolane dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/06/2015, 13h40
  3. ActiveX Acrobat AcroPDF XE5(32b) W7(64b)
    Par Eric.H dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 29/05/2014, 08h59
  4. taille struct 32b et 64b
    Par eric_vi dans le forum Qt
    Réponses: 8
    Dernier message: 19/05/2010, 15h08
  5. portage 16b -> 32b d'une dll
    Par ben23 dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 23/12/2003, 12h15

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