1 pièce(s) jointe(s)
Créer une bibliothèque activeX utilisable en VBA avec VB.net VS 2015
Bonjour,
Ce sujet doit agacer les vieux routards qui le maitrisent mais je reviens vers vous parce que je ne trouve pas de réponse satisfaisante ailleurs (et aussi parce que j'aime bien développez.net). ;)
J'essaie une nouvelle fois de créer une DLL ActiveX, en essayant de rester le plus simple possible, pour l'utiliser à partir d'une application Access VBA.
J'utilise Visual Studio 2015 et, en général, Access 2010 bien que cette partie "client" importe peu.
J'ai créé un nouveau projet VB de type Windows\bibliothèque de classe.
J'ai ajouté à ce projet un élément de type "Classe COM" nommé ComClass1.vb ce qui a eu pour effet d'activer les options "Inscrire pour COM interop" de l'onglet [Compiler] des propriétés du projet et "rendre l'assembly visible par COM" de la page "Informations de l'assembly" de l'onglet [Application].
J'ai rédigé une méthode simple dans la classe ComClass1 pour réaliser mon test. Voici l'intégralité du code de la classe:
Code:
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 26 27 28 29
|
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
#Region "GUID COM"
' Ces GUID fournissent l'identité COM pour cette classe
' et ses interfaces COM. Si vous les modifiez, les clients
' existants ne pourront plus accéder à la classe.
Public Const ClassId As String = "fd753f0c-c9bc-498a-9ac2-fede8f94b783"
Public Const InterfaceId As String = "7957fb7e-aec5-4a6d-96a0-eb12cf13a7dc"
Public Const EventsId As String = "6bd7cafa-2acb-4f1c-a357-180a74ba1691"
#End Region
' Une classe COM pouvant être créée doit avoir Public Sub New()
' sans paramètre, sinon, la classe ne sera pas
' inscrite dans le Registre COM et ne pourra pas être créée
' via CreateObject.
Public Sub New()
MyBase.New()
End Sub
Public Function Multiplier(ByVal Nombre1 As Single, ByVal Nombre2 As Single) As Object
Try
Return Nombre1 * Nombre2
Catch ex As Exception
Return Nothing
End Try
End Function
End Class |
Après avoir généré l'application sans erreur je ne parviens pas à inscrire la DLL dans la base de registre (j'utilise VS 2015 dans une VM où je n'ai pas office d'installé, je dois donc inscrire "manuellement" la DLL sur la machine qui dispose d'Office).
Voici le message d'erreur que je reçois:
Pièce jointe 555989
De même, en déclarant explicitement la fonction dans le module VBA Access de la manière suivante:
Code:
1 2
| Private Declare Function Multiplier Lib "D:\APPLICATIONS\DIVERS\ComposantVS15\bin\x86\Release\ComposantVS15.dll" _
Alias "Mutliplier" (V1 As Single, V2 As Single) |
J'obtiens une erreur
Citation:
Erreur d'exécution '453': Point d'entrée Multiplier d'une DLL introuvable dans monchemindll\monprojet.dll
J'ai essayé en modifiant la plateforme cible pour forcer sur x86, mais toujours pareil.
Bref, pour l'instant ça ne fonctionne pas...:weird:
Merci pour votre aide!