Enregister une DLL .NET/COM pour être utilisée en VBA

Résolu
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 - 25 mars 2008 à 16:57
HansPrestat Messages postés 61 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 29 juin 2008 - 13 juin 2008 à 20:09
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

bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
26 mars 2008 à 11:26
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
1
HansPrestat Messages postés 61 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 29 juin 2008
13 juin 2008 à 09:58
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
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
13 juin 2008 à 10:23
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
0
HansPrestat Messages postés 61 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 29 juin 2008
13 juin 2008 à 13:20
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 > ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
13 juin 2008 à 13:45
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
0
HansPrestat Messages postés 61 Date d'inscription vendredi 19 janvier 2007 Statut Membre Dernière intervention 29 juin 2008
13 juin 2008 à 20:09
Merci beaucoup de ton aide. Lundi j'essaye promis. Et je te tiens au courant.
0
Rejoignez-nous