Créer une dll COM en VB.NET 2008 instanciable en VBScript ou Javascript
keogus
Messages postés17Date d'inscriptionsamedi 4 mars 2006StatutMembreDernière intervention 2 février 2010
-
2 janv. 2010 à 11:55
keogus
Messages postés17Date d'inscriptionsamedi 4 mars 2006StatutMembreDernière intervention 2 février 2010
-
2 févr. 2010 à 11:37
Bonjour, je cherche à développer une DLL instanciable en VBScript ou JavaScript, pour pouvoir lire sur un poste client qui ouvre ma page web les données d'une SmartCard. J'ai créer une bibliothèque de classes en VB.NET 2008. Voici mon code (qui provient de MSDN) :
Imports System
Imports System.Runtime.InteropServices
<Guid("76b20854-b680-4c5a-8c8d-5a7c4d655cf2")> _
Public Interface ICardReader
<DispId(1)> Function SCardEstablishContext() As Integer
<DispId(2)> Function SCardListReaders() As String
<DispId(3)> Function SCardListReaderGroups() As Integer
End Interface
<Guid("76c20854-c680-4a5a-8a8d-5a7b4d655cf2"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
Public Interface ComClass1Events
End Interface
<Guid("76b20854-b680-4c5a-8c8d-5a7c4d655cf2"), _
ClassInterface(ClassInterfaceType.AutoDual), _
ComSourceInterfaces(GetType(ComClass1Events)), _
ProgId("CardReader")> _
Public Class CardReader
Implements ICardReader
Dim c As Integer = 0
Dim str As String = ""
Public Function SCardEstablishContext1() As Integer Implements ICardReader.SCardEstablishContext
SCardEstablishContext(2, 0, 0, c)
End Function
....
J'ai intégrer la DLL générée dans mon site, au niveau de ma page html. Seulement pas moyen de créer mon objet dans mon site :
<script language="vbscript" type="text/vbscript">
dim obj
set obj = createobject("SmartCard.CardReader")
obj.SCardEstablishContext()
obj.SCardListReaderGroups()
MsgBox(obj.SCardListReaders())
</script>
Il manque surement une balise object mais je ne sais pas comment la créer avec les bon paramètre. J'ai ouvert ma DLL avec DLL ExportViewer et je ne vois rien non plus. J'ai déjà réussi avec une autre dll com créer par un autre à lire quelques données de la carte, mais pour celle ci j'avais déjà la balise object dans une autre source. Je précise que quand j'ouvre cette autre dll avec ExportViewer j'ai bien les méthodes COM affichées, donc j'aimerai déjà savoir pourquoi la mienne n'affiche rien, puis après si possible comment créer ma balise object.
PS : J'ai aussi vu que beaucoup parle d'enregistrer la dll mais pour celle que j'ai trouvé je n'ai pas eu besoin, mais elle est dans un fichier cab cela a peu-être un lien , si vous avez des infos je prends tout de toute manière :p.
A voir également:
Créer une dll COM en VB.NET 2008 instanciable en VBScript ou Javascript
keogus
Messages postés17Date d'inscriptionsamedi 4 mars 2006StatutMembreDernière intervention 2 février 2010 2 janv. 2010 à 12:04
Je précise que j'ai coché "Rendre l'assembly visible à COM" dans les propriétés du projet, que ma bibliothèque a pour espace de nom racine SmartCard et pour nom d'assembly SmartCard aussi. J'ai fouillé MSDN et d'autres post énormément mais pas moyen surtout que ce code vient de MSDN donc voilà ...
Dans le CAB y'avait un fichier INF mais je n'y connais rien donc pour en écrire un ... Pour les GUID je les changés à la main, j'ai aussi essayé de les enlever mais c'est pareil .. A noter que le GUID de la classe est celui du projet, j'ai aussi essayer de la changer mais toujours rien ... Si y'a un professionnel de la dll COM ...
cs_Tropic
Messages postés90Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention 1 février 2011 29 janv. 2010 à 09:53
Pour ne pas utiliser
cocher: "Rendre l'assembly visible à COM"
Rajouter ComVisible(True) dans la déclaration
et c'est tout bon
UN EXEMPLE CONCRET
<Guid("1F249C84-A090-4a5b-B592-FD64C07DAB75"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch), _
ComVisible(True)> _
Public Interface _Classdemo
<DispId(1)> Function MaFunction() As Boolean 'avec des paramêtre si nécessaire)
<DispId(2)> Sub MonSub() 'avec des paramêtre si nécessaire)
End Interface
<Guid("E42FBD03-96DF-43a7-A491-23E735B32C5C"), _
ClassInterface(ClassInterfaceType.None), _
ProgId("demo.Classdemo"), _
ComVisible(True)> _
Public Class Class_Classdemo
Implements _Classdemo
End Class
keogus
Messages postés17Date d'inscriptionsamedi 4 mars 2006StatutMembreDernière intervention 2 février 2010 29 janv. 2010 à 13:13
J'ai essayé le tuto pas moyen, mais j'ai du sauter deux étapes : Cocher la case interop car je ne la trouve pas, et même la solution de remplacement de faire un regasm je ne trouve pas l'option ... J'utilise VB Express 2008, peut-être que c'est dû à cela ...