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

Développement Windows Discussion :

DLL COM entre VS2010 et Excel 2003 VBA


Sujet :

Développement Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut DLL COM entre VS2010 et Excel 2003 VBA
    Bonjour,

    Je viens de passer toute une magnifique journée a essayer de fabriquer une DLL en C# que je pourrais appeler via Excel 2003 en VBA. Voila ou j'en suis :
    - Je crée un un projet de type Librairie dans VS.
    - Il semble qu'a partir d'Excel 2007, d'autres moyens existent, mais pour 2003, je dois utiliser une DLL COM. Je vais donc dans les proprietes de mon projet, et je coche "Make assembly COM-visible", puis dans l'onglet Build je coche "Register for COM interop".
    Je construit une classe toute bete pour tester... disons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [ClassInterface(ClassInterfaceType.AutoDual)]
        public class Class1
        {
            public string Pouet()
            {
                return "Pouet";
            }
        }
    Je compile tout ca, et je lance Excel. Dans mon VBA, je vais chercher mon fichier .tbl et y ajoute une reference et ... ca marche!

    Oui oui, ca marche.

    Donc tout content, je copie ma DLL et mon fichier Excel sur le réseau, je lance devant mon patron... et naturellement a ce moment la, rien ne marche!
    Run-time error: Activex component can't create object

    En cherchant un peu, j'ai découvert qu'il faut "enregistrer" la DLL localement sur les machines utilisateurs, a l'aide du programme RegAsm.exe...
    Et lorsque je fais ca, l'erreur devient "Automation Error"

    Hum... ...

    Fin, voila vous pouvez constater mon etat d'esprit ^^

    Une idée?

    PS: Désolé pour les accents, y en a pas dans ce pays -_-

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 153
    Par défaut
    Hello,

    Bon, un bilan sur mes avancements sur le sujet:
    J'ai découvert que lorsque j'appelle la commande RegAsm... il faut aussi que je crée un .tlb (en rajoutant /tlb), que je dois aussi appeler cette même commande avec /codebase... et que pour faire cette appel, je dois signer mon assembly (dans les propriétés de la DLL sous VS)

    Un petit bout de code pour automatiser tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                string regAsmPath = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe";
                Process.Start(regAsmPath, "\"" + dllFullName + "\"");
                Process.Start(regAsmPath, "\"" + dllFullName + "\"" + " /tlb:\"" + tlbFullName + "\"");
                Process.Start(regAsmPath, "\"" + dllFullName + "\"" + " /codebase");
    Et tout ca, ca marche.... si je compile en .net 4 uniquement
    J'y suis presque...

  3. #3
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    La dll peut aussi être enregistrée dans le GAC. L'outil c'est gacutil.exe.

    La dll doit avoir un nom fort (ajouter un fichier .snk).

Discussions similaires

  1. [XL-2007] échange entre outlook et excel via vba
    Par pyloupylou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/01/2012, 11h53
  2. Excel 2003 VBA
    Par uzinagaz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/09/2011, 15h50
  3. Excel 2003 VBA- RECHERCHEV
    Par edjo123 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/06/2011, 15h42
  4. Excel VBA et dll Com VB.net:passage d objet en parametre
    Par blueskyman dans le forum VB.NET
    Réponses: 0
    Dernier message: 02/02/2009, 02h22
  5. Comment partager du VBA entre Outlook 2003 et Excel 2003
    Par metramo dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/03/2008, 14h49

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