Créer une dll COM en VB.NET 2008 instanciable en VBScript ou Javascript

keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010 - 2 janv. 2010 à 11:55
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Derniè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.

13 réponses

keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Derniè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 ...

Merci encore ...
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
3 janv. 2010 à 15:45
Personne développe le week-end ? me semblait bien que j'avais un soucis ...
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
4 janv. 2010 à 08:57
Up ?

PS : Pour les GUID je viens de voir que deux sont identiques mais j'ai bien essayé avec des différents ça vient pas de là.
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
6 janv. 2010 à 10:14
Sinon si vous avez des liens ou je pourrais trouver des infos merci à vous.
0

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

Posez votre question
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
15 janv. 2010 à 15:26
Up ?
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
23 janv. 2010 à 13:03
Snif ... Bon merci quand même ça devait être un post compliqué aussi ptêtre ...
0
cs_Tropic Messages postés 90 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 février 2011
29 janv. 2010 à 06:18
Bonjour,
moi j'ai suivi ce tuto et ça fonction très bien
http://www.codeproject.com/KB/vb/MusaExposingCOM.aspx

Et surtout cocher
"Rendre l'assembly visible à COM"
0
cs_Tropic Messages postés 90 Date d'inscription lundi 16 décembre 2002 Statut Membre Derniè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
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
29 janv. 2010 à 11:33
Merci mille fois pour votre réponse, je vais essayer ce week-end et je vous tiens au courant !
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Derniè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 ...

Merci pour votre aide !
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
29 janv. 2010 à 13:16
J'ai oublié de vous demander, mais pouvez-vous me montrer votre code html pour que je vois comment vous appeler la dll ?

Merci beaucoup
0
cs_Tropic Messages postés 90 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 février 2011
29 janv. 2010 à 20:34
VB Express 2008, c'est pour débuter ça
c'est peut être la cause!! (édition pro moi)

Moi c'est avec VB6 en utilisant Createobject.
Mais c'est la même technique pour du asp je crois

Voir aussi
http://www.codeproject.com/KB/vb/COM_Interop.aspx
0
keogus Messages postés 17 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 2 février 2010
2 févr. 2010 à 11:37
Bon ben j'ai essayé mais pas moyen, je dois foirer un truc, j'essaierai avec la version pro dès que je peux, merci quand même pour votre aide
0
Rejoignez-nous