Vb.net Bibliothéque de classe

Résolu/Fermé
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 - Modifié par Creutzou le 16/03/2011 à 15:14
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 - 17 mars 2011 à 17:31
Bonjour,

Pour planter le décors, j'ai une application tournant sous Ms Access. J'ai fais une bibliothèque de classe en vb.net pour pouvoir faire interagir mon application access avec un webservice.
J'arrive bien à importer ma dll dans Access.
Lors de la déclaration des variables
Si je fais
 "Dim export as new madll.maclasse" 
ma classe n'est pas reconnue.

Si je fais
"dim export as madll.maclasse"
ma classe est bien reconnue.

Donc en faisant quelque chose du genre :
"   
dim export as madll.maclasse   
export.mafonction(variable)   
"  

je tombe sur l'erreur suivante :
"Variable objet ou variable de bloc With non définie"

ce que je trouve logique car je n'instancie nulle part mon objet.
( enfin je crois )

étant complétement perdu je m'en remet à vous, si vous avez besoin de mes bouts de code ou de plus d'info, n'hésitez pas !

En vous remerciant d'avance !
Tout vient à point à qui sait attendre

19 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 16/03/2011 à 15:29
Bonjour,
Tu a ajouter la dll dans les références ?
Tu l'a inscrite dans le régistre ?
A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 16/03/2011 à 15:48
Oui, je les inscrite dans "com interop" et je l'ai bien ajouté en référence dans Access. Puis j'ai fermé et réouvert la base.
J'ai suivis le mini tutoriel du msdn de Microsoft pour exporter des dll dot net vers du vba
Tout vient à point à qui sait attendre
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 16/03/2011 à 16:12
Tant que... "Dim export as new madll.maclasse" ne fonctionnera pas c'est inutile d'aller plus loin.
1°) l'extention de la dll doit être Madll.dll
2°) Y faut l'inscrire au registre Windows avec RegSVR32
3°) Donc en faisant quelque chose du genre :

dim export as madll.maclasse
export.mafonction(variable)

Y manque Export = new madll.maclasse
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 16/03/2011 à 16:33
Dim Export As asvadll.PSE 
Export = New asvadll.PSE 
export.mafonction(variable)


renvoie une erreur "utilisation incorrect du mot clé new"
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
16 mars 2011 à 16:11
première fois que j'entends parlé du RegSVR32, je vais explorer cette piste et te tien au courant.
0

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

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 16/03/2011 à 16:27
a voir
Et si tu ne veux pas avoir de problème, met ta dll dans System32

Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
16 mars 2011 à 16:30
Alors alors, j'ai tenté d'utiliser regsvr32 mais il me dit qu'il n'y a pas de point d'entrée dans DllRegisterServer.
J'ai retenté l'opération en la mettant de le system32, puis dans sysWow64 mais rien n'y fait. Est ce ma dll qui est mal construite?

Option Explicit On
<ComClass(PSE.ClassId, PSE.InterfaceId, PSE.EventsId)>
Public Class PSE
    Public Const ClassId As String = "F78B9B01-7553-4a3a-9A44-A4778649974D"
    Public Const InterfaceId As String = "F9CB47EC-1A2E-4a97-87BD-9FAD12D124ED"
    Public Const EventsId As String = "BDB03602-DB50-46fe-A722-788703A1A16A"
    Private Sub New()
        MyBase.New()
    End Sub
    Public Function envoi(ByVal content as string) as string
        Dim reponse as string
        Dim connection As New refweb.webservice
        reponse = connection.fonctionduwebservice(content)
        Return reponse
    End Function
End Class
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 16/03/2011 à 20:16
Tu a recopier un code que tu à trouvé mais tu ne l'adapte pas à tes configurations.
Quel bibliothèque(s) tu a ajouter à ta classe
Et tu n'a certainement pas pu le compiler.
Faire une dll c'est pas "y a qu'a"
quel nom (complet) a ta "dll"
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 17/03/2011 à 10:11
ma dll s'appelle exactement "madll.dll"

d'ailleurs je ne sais même pas si c'est une dll dont j'ai besoin.
Je veux juste pouvoir utiliser un bout de code vb.net dans une application vba
Tout vient à point à qui sait attendre
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 mars 2011 à 11:07
Et quel est le bout de code que tu veux employer en VBA ?
Pas celui plus haut, ça n'ira pas.
Et que veux-tu faire exactement ?
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 17/03/2011 à 11:37
Alors je dois faire interagir ma base Access, avec un web service.
Avec Dotnet, j'ai juste à ajouter la référence du service, et tout marche nickel.
Seulement avec Access, je ne peux pas ajouter cette référence.

Mon idée était donc de faire une fonction en vb.net, et de pouvoir l'appeler depuis ma base. Après quelque recherche ( qui sont restées très floues) j'ai cru comprendre que de faire une dll serait la solution la plus simple. Cependant, pour exporter une dll vb.net en vba, il faut la rendre visible COM ( toujours d'après ce que j'ai compris).

Maitrisant assez mal la POO, je pensais juste que ma classe était mal construite, ou mon objet mal instancier.
Tout vient à point à qui sait attendre
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 17/03/2011 à 15:32
J'ai trouvé une solution temporaire, mais qui ne me satisfait qu'a moiter en attendant d'avancer de l'autre coté.
J'ai créer une application console qui joue le rôle de passerelle., en lui transmettant les données en paramètre.

Lermite222, connais tu une solution plus adapté que faire une dll qui ne tien pas la route ?

Sinon le bout de code que je voudrais utiliser est :
 Public Function envoi(ByVal content) 
        Dim response 
        Dim connection As New Export.ServicesSoapClient 
        reponse = connection.ImportVehicles(content) 
        Return response 
    End Function 

Ou Export est une référence au web service en question.
Tout vient à point à qui sait attendre
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 mars 2011 à 15:13
Re,
Je ne connaît pas ta connexion, mais en VBA il est possible d'employer un module de classe qui est l'équivalent d'une dll mais propre a l'appli en cour.
Si ta fonction (avec ses paramètres) fonctionne, tu peu les implémenter dans ce genre de module et ensuite y faire référence dans ton code VBA.
Quand tu veux ajouter la bibliothèque ServicesSoapClient quel est la réponse ?
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
17 mars 2011 à 15:54
Je vais explorer la piste des module de classe.
Sinon je n'arrive pas à ajouter la Bibliothèque ServicesSoapClient dans access.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 mars 2011 à 16:29
Quel est l'erreur quand tu veux installer la bibliothèque ?
C'est dans référence bien entendu.
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 17/03/2011 à 16:33
Je ne sais pas comment l'expliquer, mais dans Visual Studio Express, j'ai ajouté une référence web dans mon projet ( en rentrant l'url du web service).
Donc ServicesSoapClient provient de cette référence.
Or dans Access, je n'ai la possibilité d'ajouter uniquement des référence "local".
Ou alors je suis pas très dégourdis ( ce qui est fort possible aussi ;)


Tout vient à point à qui sait attendre
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 mars 2011 à 16:50
OK, je commence à comprendre, explique EXACTEMENT ce que tu veux transférer au moyen de WebService.
Normalement ce n'est que du contenu XLM ? ce qui n'est pas fort compatible avec Access.
Si un autre intervenant comprend mieux, qu'il intervienne sans hésitation.
A+

0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 17/03/2011 à 17:09
Je transfert des données contenue dans la base.
en schématisant, J'ai une table
voiture(ID,marque,model,année,immatriculation)

et je veux envoyer ces données au web service.
Le web service attends du xml avec une enveloppe SOAP (c'est à cause de cela que je m'etais penché sur DOT NET, car avec l'ajout de référence, l'enveloppe etc... ce faisait toute seul).

je crée une variable String ( que nous appellerons Flux).J'ouvre un record set et je construit mon flux xml d'une manière peut être barbare.

flux ="<racine>"& vbCrLf    
 rst104.MoveFirst    
        Do Until rst104.EOF    
                    
              
 flux = flux & "<vehicle>" & vbCrLf & _    
 "<id>" & Idvoiture & "</id>" & vbCrLf & _    
"<make>" & rst104!marque & "</make>" & vbCrLf & _    
 "<model>" & rst104!Modéle & "</model>" & vbCrLf & _    
 "<type>" & rst104!Genre & "</type>" & vbCrLf & _    
  "<body>" & rst104!Carrosserie & "</body>" & vbCrLf & _    
  "<energy>" & rst104!Energie & "</energy>" & vbCrLf & _    
  "<kilometer>" & rst104!kms & "</kilometer>" & vbCrLf & _    
 "<plate>" & rst104!Immat & "</plate>" & vbCrLf & _    
 "<year>" & rst104!datemec & "</year>" &  vbCrLf    
   flux = flux & "</vehicle>"    
                                                   
                     rst104.MoveNext    
                Loop    



Puis je transmet la variable flux à la passerelle ( qui est justement en cours de construction).
Je fais peut être une usine à gaz, mais je n'ai trouvé que ca comme méthode.
Tout vient à point à qui sait attendre
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 mars 2011 à 17:25
Désolé, mais pour le xlm je suis nul, vaudrait mieux que tu crée un nouveau topic en expliquant tout ce que tu vient de dire parce qu'au départ... C'était pas clair du tout.
A+
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 17/03/2011 à 18:02
dac, je vais recommencer depuis le début en demandant un coup de main sur la marche à suivre, car j'ai peur de faire une ENORME usine à gaz.
Une chose est sûre, je te remercie grandement du temps passé sur mon cas !

édit: La suite des événements c'est par ici
Tout vient à point à qui sait attendre
0