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

VB.NET Discussion :

VS2022 création d'une Dll pour VBA - erreur regasm [Débutant]


Sujet :

VB.NET

  1. #1
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut VS2022 création d'une Dll pour VBA - erreur regasm
    Bonjour,

    Je souhaite réaliser une Dll pour VBA, pour l'instant je souhaite simplement envoyer des valeurs à une méthode de la Dll et qu'elle me renvoie le résultat.

    J'ai suivi la page MS suivante :
    https://learn.microsoft.com/en-us/do...ng-com-objects

    J'ai bien coché l'option COM dans les préférences du projet.

    Voici le code VB de mon test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Imports System.Runtime.InteropServices
     
    <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)>
    <ComVisible(True)>
    Public Class ComClass1
     
    #Region "COM GUIDs"
        Public Const ClassId As String = "E3C9AB19-7696-42A9-B934-F687E18C6E3A"
        Public Const InterfaceId As String = "12642CF7-5F75-437D-974D-58825811C40F"
        Public Const EventsId As String = "1E4CB5DE-9875-42BE-A8DE-EDFE4E49A04B"
    #End Region
     
        Public Sub New()
            MyBase.New()
        End Sub
     
        <ComVisible(True)>
        Public Function Addition(valeur1 As Double, valeur2 As Double) As Double
            Addition = valeur1 + valeur2
        End Function
     
    End Class
    La Dll est créé mais il y a une erreur lors du regasm :

    Nom : 2023-02-06_13h20_34.png
Affichages : 175
Taille : 8,6 Ko

    VS2022 et la ligne de commande pour lancer le regasm sont lancé en mode administrateur.

    J'ai lancé un MsBuild, en voici le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    MSBuild version 17.4.1+9a89d02ff for .NET Framework
    Les projets sont g‚n‚r‚s individuellement dans cette solution. Pour activer la g‚n‚ration en parallŠle, ajoutez le commutateur "-m".
    La g‚n‚ration a d‚marr‚ 06/02/2023 13:24:02.
    Projet "D:\MyDotNetProjects\repos\ClassLibrary1\ClassLibrary1.sln" sur le noud 1 (cibles par d‚faut).
    ValidateSolutionConfiguration:
      G‚n‚ration de la configuration de solution "Debug|Any CPU".
    Le projet "D:\MyDotNetProjects\repos\ClassLibrary1\ClassLibrary1.sln" (1) g‚nŠre "D:\MyDotNetProjects\repos\ClassLibrary1\ClassLibrary1\ClassLibrary1.vbproj" (2) sur le noud 1 (cibles par d‚faut).
    GenerateTargetFrameworkMonikerAttribute:
    La cible est ignor‚e "GenerateTargetFrameworkMonikerAttribute", car tous les fichiers de sortie sont à jour par rapport aux fichiers d'entr‚e.
    CoreGenerateAssemblyInfo:
    La cible est ignor‚e "CoreGenerateAssemblyInfo", car tous les fichiers de sortie sont à jour par rapport aux fichiers d'entr‚e.
    CoreCompile:
    La cible est ignor‚e "CoreCompile", car tous les fichiers de sortie sont à jour par rapport aux fichiers d'entr‚e.
    GenerateBuildDependencyFile:
    La cible est ignor‚e "GenerateBuildDependencyFile", car tous les fichiers de sortie sont à jour par rapport aux fichiers d'entr‚e.
    CopyFilesToOutputDirectory:
      ClassLibrary1 -> D:\MyDotNetProjects\repos\ClassLibrary1\ClassLibrary1\bin\Debug\net6.0\ClassLibrary1.dll
    G‚n‚ration du projet "D:\MyDotNetProjects\repos\ClassLibrary1\ClassLibrary1\ClassLibrary1.vbproj" termin‚e (cibles par d‚faut).
    G‚n‚ration du projet "D:\MyDotNetProjects\repos\ClassLibrary1\ClassLibrary1.sln" termin‚e (cibles par d‚faut).
     
    La g‚n‚ration a r‚ussi.
        0 Avertissement(s)
        0 Erreur(s)
     
    Temps ‚coul‚ 00:00:00.61
    J'ai fait pas mal de recherche sur le NET, j'ai dû passer à côté d'un truc.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 107
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 107
    Points : 1 611
    Points
    1 611
    Par défaut
    J'ai l'impression que ton projet d'origine est en .NET 6 (présence du répertoire net6.0 dans le chemin du debug), et pas .NET Framework 4.8 (par exemple) et que c'est ça qui cause l'erreur avec regasm (qui je crois est pour les composants COM issu de .NET Framework).
    Dans le cas de .NET (Core), ça passe par regsvr32 => https://learn.microsoft.com/en-us/do...ponents-to-com

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    Merci pour ta réponse qui me fait avancer.

    J'ai donc téléchargé la version 4.8 et impossible de la voir sur vs2022. En allant faire un tour sur MS pour connaitre le pourquoi je suis tombé sur cette info aussi intéressante que bien planqué au fin fond d'une page (MS ne changera jamais sur l'information).
    À compter de Visual Studio 2022, Visual Studio n’inclut plus les composants .NET Framework pour .NET Framework 4.0 - 4.5.1, car ces versions ne sont plus prises en charge. Visual Studio 2022 et ses versions ultérieures ne peuvent pas générer d’applications ciblant .NET Framework 4.0 à .NET Framework 4.5.1. Pour continuer à créer ces applications, vous pouvez utiliser Visual Studio 2019 ou une version antérieure.
    Donc je vais virer VS2022 et poser VS2019 à la place en espérant que ça marche mieux. Je verrais plus tard pour les composants PIA.

    A suivre...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    J'ai bien avancé avec le vs2019 et .net 4.8

    ça génère la Dll et le Tlb sans erreur, j'arrive à l'inscrire avec regasm mais pas regsvr32.

    Nom : 2023-02-06_22h54_37.png
Affichages : 165
Taille : 6,9 Ko

    Je le vois dans la liste des références du VBE, dans l'explorateur d'objet, la (pauvre) fonction dans l'autocomplétion de même que les 2 paramètres.

    A l'exécution il me dit que la classe n'est pas enregistrée.

    je ne désespère pas.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 107
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 107
    Points : 1 611
    Points
    1 611
    Par défaut
    euh il est dit que VS2002 ne gère plus .net Framework jusqu'à 4.5; donc 4.8 ça fonctionne ....
    Il faut choisir à la création du projet un projet noté Framework pour utiliser .NET Framework, sinon par défaut c'est .NET (core).

    regasm doit suffire pour enregistrer la dll d'après sa doc.

    Après essais et sueurs, il faut lancer la commande regasm avec l'option /codebase (un message te dira d'utiliser un nom fort pour ta dll et te préviendra d'un probleme de potentiel interférence avec d'autres dll, mais fera l'inscription et rendra ta dll utilisable)
    nom fort = autre chose ClassLibraryx (bref un nom bien parlant)

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    merci pour toutes ces précieuses infos.

    Je vais tenter ça.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    Merci umfred. Tu as bien solutionné mon problème.

    • Désinstallation de vs2019
    • installation de vs2022
    • Démarrer en mode admin
    • Sélection des composants Office (pour plus tard)
    • Nouveau projet
    • Filtre visual basic / Windows
    • Choix de Bibliothèque de classes (.Net Framework)
    • Cocher la case Projet/Propriétés du projet.../Compiler/S'inscrire à COM Interop


    J'ai mis mon petit code rikiki

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Imports System.Runtime.InteropServices
     
    <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)>
    <ComVisible(True)>
    Public Class ComClass1
     
    #Region "COM GUIDs"
        Public Const ClassId As String = "..."
        Public Const InterfaceId As String = "..."
        Public Const EventsId As String = "..."
    #End Region
     
        Public Sub New()
            MyBase.New()
        End Sub
     
        <ComVisible(True)>
        Public Function Addition(valeur1 As Double, valeur2 As Double) As Double
            Addition = valeur1 + valeur2
        End Function
     
    End Class
    La valeur de chaque Const doit être remplacée par un Code GUI unique (Outils / Create GUI).
    Générer le projet.

    Pour inscrire la dll :
    regasm nomDeLaDll.dll /codebase

    Et ça fonctionne parfaitement dans un projet VBA.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. Création d'une DLL pour utilisation dans JNI
    Par Godestiny dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/06/2011, 11h36
  2. Réponses: 3
    Dernier message: 09/11/2007, 14h08
  3. Réponses: 4
    Dernier message: 31/07/2007, 18h02
  4. dll C++ pour VBA : erreur 49 et 453
    Par EL0807 dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2006, 23h01
  5. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2005, 09h24

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