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

bossun 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 25 mars 2008 à 16:57 - Dernière réponse : HansPrestat 62 Messages postés vendredi 19 janvier 2007Date d'inscription 29 juin 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
bossun 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 26 mars 2008 à 11:26
3
Merci
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

Merci bossun 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de bossun
HansPrestat 62 Messages postés vendredi 19 janvier 2007Date d'inscription 29 juin 2008 Dernière intervention - 13 juin 2008 à 09:58
0
Merci
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
Commenter la réponse de HansPrestat
bossun 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 13 juin 2008 à 10:23
0
Merci
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
Commenter la réponse de bossun
HansPrestat 62 Messages postés vendredi 19 janvier 2007Date d'inscription 29 juin 2008 Dernière intervention - 13 juin 2008 à 13:20
0
Merci
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 > ...
Commenter la réponse de HansPrestat
bossun 175 Messages postés lundi 3 mars 2003Date d'inscription 15 décembre 2010 Dernière intervention - 13 juin 2008 à 13:45
0
Merci
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
Commenter la réponse de bossun
HansPrestat 62 Messages postés vendredi 19 janvier 2007Date d'inscription 29 juin 2008 Dernière intervention - 13 juin 2008 à 20:09
0
Merci
Merci beaucoup de ton aide. Lundi j'essaye promis. Et je te tiens au courant.
Commenter la réponse de HansPrestat

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.