Enregister une DLL .NET/COM pour être utilisée en VBA [Résolu]

Signaler
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
Messages postés
61
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
29 juin 2008
-
Salut,

J'ai fait une DLL que je voudrais utiliser en VBA dans Excel ou Access.

En fait tout fonctionne très bien sur mon poste de développement mais quand je déploie ça sur les postes de prod, ça ne marche pas.

Je fais un regasm.exe mais je ne peux pas l'ajouter en reférence dans mes projets vba...

qqn aurait-il une diée...

voilà le code de ma dll...

namespace CRMFunctions
{
    [ClassInterface(ClassInterfaceType.None),
     ComDefaultInterface(typeof(ICRMFunctions))]
    public class CRMFunctions: ICRMFunctions
    {
        //public CRMFunctions()
        //{
       
        //}
        [ComRegisterFunctionAttribute]
        public static void RegisterFunction(Type type)
        {
            RegistryKey key = null;
            Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type));
            key =Registry.ClassesRoot.CreateSubKey("CLSID\\{"+type.GUID.ToString().ToUpper()+"}\\InprocServer32");
            key.SetValue("", Environment.GetFolderPath(Environment.SpecialFolder.System)+@"\mscoree.dll");
        }

        [ComUnregisterFunctionAttribute]
        public static void UnregisterFunction(Type type)
        {
            Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type), false);
        }

        private static string GetSubKeyName(Type type)
        {
            string s = @"CLSID\{" + type.GUID.ToString().ToUpper() + @"}\Programmable";

            return s;
        }

        public DateTime DateFixing_1()
        {
            string sqlDateFixing = "Select j_1 From dbo.VW_STD_DATEFIXING";
            return DateTime.Parse(dBAccess.GetValue(sqlDateFixing).ToString());
        }
        public DateTime DateFixing_2()
        {
            string sqlDateFixing = "Select j_2 From dbo.VW_STD_DATEFIXING";
            return DateTime.Parse(dBAccess.GetValue(sqlDateFixing).ToString());
        }
        public DateTime DateFixing_3()
        {
            string sqlDateFixing = "Select j_3 From dbo.VW_STD_DATEFIXING";
            return DateTime.Parse(dBAccess.GetValue(sqlDateFixing).ToString());
        }

  
    }
}

Merci d'avance

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F

6 réponses

Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
j'ai trouvé ce qu'il faut faire,

il suffit juste de faire un regasm.exe /codebase /tlb mydll.dll

j'avais pas mis le parametre tlb, c'est pour ça que ca plantait.

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F
Messages postés
61
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
29 juin 2008

J'ai un petit problême pour utiliser ma dll C# 2.0 sous Access 2003. Pourrais-tu m'indiquer la marche à suivre?
Cette dll est censé récupérer le chemin d'un fichier via une sorte d'OpenfileDialog. Si il y a une autre manière de faire ça mais qu'en vba alors je suis preneur. Help me please
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
As-tu fait ce que j'ai noté dans mon poste précédent?? c-à-d enregistrer ta dll avec regasm???

sans cela tu ne peux pas utiliser une dll .net en vba... à ma connaissance

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F
Messages postés
61
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
29 juin 2008

Désolé mais je suis tout jeune débutant vba. 2 ans pour .net. Je n'ai pratiquement rien compris à ton code à part le sujet (lol). Est-ce-que ça serait possible de détailler ce que je dois faire? Ex: Fichier > ...
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
Alors en .net tu sais créer une DLL COM.

Alors ta dll il faut l'enregistrer. Les anciennes dll, c'était avec Regrsv32 mais les Dll .net c'est avec RegAsm.

regasm se trouve dans le repertoire de ton framework 2.0. il faut l'exécuter en ligne de commande.

regasm.exe /codebase  /tlb Tadll.dll

dans le repertoire de ta DLL tu va voir un fichier Tadll.tlb qui va être crée. ce fichier va te servir à utiliser ta dll .net depuis vba par ex.

Dans otn projet vba, tu va dans références, et tu va chercher l'assembly de ta Dll que tu va chocher.

après il ne te reste plus qu'à l'utilsiser comme n''importe quelle bibliothèque.

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F
Messages postés
61
Date d'inscription
vendredi 19 janvier 2007
Statut
Membre
Dernière intervention
29 juin 2008

Merci beaucoup de ton aide. Lundi j'essaye promis. Et je te tiens au courant.