Probleme dll,sniff suis perdue

Résolu
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005 - 28 mars 2005 à 06:13
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 30 mars 2005 à 11:20
Bah voila 5h00 du mat toujours pas reussie, ze m'embrouille...
Vais essayer d'etre un minimum claire dans ma question

Projet: moteur de recherche
je desire mettre chaque moteur dans une dll pour en faire des plugins mais bon pour le moment j'en suis pas encore là....

Donc je creais une dll on va dire pour google qu'on appelera google.dll

Je sais pas trop ce qu'on peux et peux pas mettrededans et comment le mettre...
dans celle si j'ai une function search

en faite dans le prog j'ai une listview sur form1
je veux donc envoyer les resultat dans cette listview

donc le code de la dll tout beurk qui marche pas:

Public function search (frm as form, search as string)
frm.listview1.listitems.clear
source= frm.get1.openurl(..........)
..
..
frm.listview1.listitems(frm.listview1.listitems.count).lissubitems.add , , bouh
..
end function

et dans le programme:
donc je reference google.dll dans le projet du programme qui s'en servira
ensuite dim bouh as new google.search

comand1_click()
bouh.search(form1)
( au passage pourquoi parfois on dois faire call bouh.search pour que ca marche ?)

j'ai essayer plein de methode differente mais rien veux marcher
le form qui semble poser probleme :(
dans la fonction je fait plein de truc genre:
start1=instr(source...)
end1=...
et obligée de mettre 50 dim start1 as long, end1 as long, start2 as long....

apparemnt form et prive et ne fonctionne pas dans les function public

j'espere pas avoir été trop brouillon et recevoir des reponse.
Joyeuse paques

20 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 09:52
Oui, un objet Form ne peut pas être utilisé en temps que paramètre
d'une fonction publique apparement. Pour résoudre ton problème, mets
ceci :



Public function search (frm as Object, search as string)


Dim Feuille As Form



Set Feuille = frm



'le reste de ton code en remplacant frm par Feuille



End Function


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : http://www.ProgOtoP.com/popapi/
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 15:31
Ben pourtant ton code me semble correct !



Vérifie bien que ta dll est compilée, et que la classe nommée Main
contient bien une fonction ou procédure publique nommée search...

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 16:00
Je devrais peut etre pas l'appeler Main ca gene peut etre...
J'ai chercher un peu sur google et apparemnt latebinding serais bien plus lent .
Ne peut ont pas utiliser une methode plus classic en declarant dans un fichier .ini ?
Euh pour la classon la met en Publicnotcreatble?, Multiuse?
Au cas ou google serais down ou ma connection la dll risque de tout planter non?
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 16:26
En effet, le latebinding est bien moins rapide que le early-binging car
VB est obligé de convertir les types de données à chaque fois, mais
bon, pour un appel à une dll ActiveX, et surtout, pour le genre de
traitement que tu souhaite faire, je ne pense pas que ce soit vraiment
flagrant ! (surtout qu'il s'agit de la seule solution vu ce que tu veux
faire, à moins de passer par du C !)


Sinon, je te conseille de mettre ta classe en MultiUse, cela te
permettra de créer plusieurs instances de ta classe en même temps.



C'est à toi de définir ce que doit faire la dll si google ne répond
pas, car sinon, si l'appel à la dll est bloquant, la dll bloquera tout
ton programme !


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3

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

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 17:10
En effet, une fois que tu n'as plus besoin de la dll, ca ne sert à rien
de garder des ressources, donc un Set b = Nothing permet de les libérer.



Pour la compatibilité binaire, il te faut compiler au moins une fois ta
dll, et ensuite, appliquer une compatibilité binaire avec la dll
compilée.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
30 mars 2005 à 06:51
Si tu déclare un type ListView dans ton ocx, il faut que ton ocx sache
ce qu'est un ListView, ce qui n'est apparement pas le cas. Pour
résoudre ce problème, c'est simple : sélectionne le projet
correspondant à ton ocx dans l'explorateur de projet de VB, puis clique
à droite sur la barre d'outils, et sélectionne le menu "Composants".
Ensuite, dans la liste de composants disponibles, coche celui des
Microsoft Common Controls 6 pour que ton ocx reconnaisse les listviews.



Ensuite, pour le problème que tu rencontre avec le listbox, c'est tout
à fait normal : si tu spécifie le contrôle en paramètre, tu n'as plus
besoin de le référencer avec le nom de la feuille : un simple
listy.AddItem("I_m_sexy") suffit à la place d'un feuille.listy.AddItem !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 08:42
Oula,



Il ne faut pas faire : dim bouh as
new google.search car sinon, tu essaye de créer une instance d'un objet
nommé Search, qui n'existe pas... Il faut plutôt déclarer :


dim bouh as new google.NomDeLaClasse




Et ensuite :



Call bouh.Search(Form1, "Texte à chercher")


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 09:19
Bouh pas encore couchée :(
Merchi pour la reponse mais faudrais deja que j'arrive a complier la dll

me mets:
Erreur de compilation

Des modules d'objet privés ne peuvent etre utilisés dans le smodules d'objet public comme type renvoyés ou parametres pour les procedures publiques, comme mebres de donnée publics ou comme champs de types publics definis par l'utilisateur.

si je mets private function search (frm as form, search as string) ca se compile bien mais dans le programme : erreur de compilation methode ou memebres de donées introuvable :(
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 10:20
Merci pour cette reponse tres rapide
Tout fonctionne parfaitement
Il me reste plus qu'a trouvercomment faire pour que le programme detecte tout seul les dll sans avoir besoin de le modifier. Faire de dll comme google des plugins qoa.
Encore emrchi
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 10:53
Il te suffit pour cela de compiler tes dll en mode "compatibilité
binaire" (que tu trouvera dans l'onglet compilation des propriétés de
ton projet).



Par contre, cela sous-entend aussi que tu ne modifie pas l'interface de
tes fonctions : une fois définies, il ne faut plus toucher à leurs
déclarations !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 12:07
j'avais vu dans un exemple qu'il parlais de ca :"compatibilité binaire"

Deja le meme nom pour la class que je mets dans chaque dll

quand on coche la compatibilité binaire on dois selectionner avec qui.. pour la deuxieme je veux bien selectionner le premiere dll mais pour la premiere...

private sub form_load()
dim Thepluginname as string
dim i as long
File1.Pattern = "*.dll"
File1.Path
For I = 0 to file1.listcount
Thepluginname = left$(file1.list(i), 3 )
if strconv(Thepluginname, vblowercase)= "plug" then
list1.additems (File1.list(i))
end if
next i
end sub

jusque la chat va les plugins s'affiche bien dans le listbox
apres euh..
for b = 0 to file1.listcount
dim b as new b.NomDeLaClasse
next i

mouais non c'est pas ca
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 12:46
Ah non, ce que tu cherche à faire est du earlybinding, c'est à dire que
tu créer une référence à VB, donc si ta dll n'existe pas, ca fera
planter ton prog dès le lancement !



Ce qu'il faut faire, c'est du latebinding, c'est-à-dire créer l'instance de ta dll lors de l'éxécution. Cela donne :


dim b as Object

Set b = CreateObject("NomDeLaDll.NomDeLaCLasse")




DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 14:11
z'alors ...

Private comman1_click ()
Dim plugx as string
plugx = Mid(List1.text,1,Len(list1.text)-3) ' j'enleve .dll
Dim b as Object
set b= CreateObject ( plugx & "Main") 'nom de la dll google , class : Main
Call b.search( form1, "le mot")
end sub

erreur 438 l'objet ne gere pas cette propriete ou cette methode
en enlevant le call : type incompatible
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 16:31
Ah ben ca venais d'autr chose
un feuille.label1.caption..
j'avais refait une form pour tester et je l'avais oublier.
Une fois compiler ca met error mais ca aide pas trop
et une fois la ptite recherche effectuer ne doist'on pas decharger la dll?

set b = Nothing
avant de lancer une recherche avec une autre

Sinon ca sembl fonctionner, part que j'ai du register 5 fois les dll mais bon une fois finie faut pu y toucher . peux etre que c'est pas genant de les register a chaque lancement du programme pour etre sur.
par contre pour la compatibilite binnaire j'ai pas encore trouver. Il faut selectionner avec quoi elle est compatible.. une autre dll? et la prmiere... a elle meme?
Il dois falloir quand meme plus de verification d'erreur avec ces dll, chose que je mets jamais...
Merci pour cette patience, et ces explications tout a fait clair, domage on peut pas mettre de note
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 19:50
Encore merchi je vais matter un peu quelques exemples voir comment ils geres les erreur et problemes. Euh et en vb.net ca serais le mem bordel ou ca va mieux a faire? :)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2005 à 19:53
J'ai jamais programmé en .NET (je suis encore un fervent défenseur de
VB6 : le .NET est plus lent, plus lourd), mais je pense que ca serait
plus facile à faire... et beaucoup plus lent à éxécuter... D'ailleurs,
je serais curieux de voir ce que donne une dll ActiveX en .NET avec la
machine virtuelle qui se lance avec, ca doit être très lourd...

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
28 mars 2005 à 23:52
Ah ben merci je ne m'ettais pas vraiment documenté je croyais que c'etais une belle evolution avec certes des ptit modules deja tout presmais, je pensais que c'etait plus rapide que vb6.
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
30 mars 2005 à 05:38
Bouh encore un probleme lol
en plus de la form je voulais preciser d'autre truc
public function search(fro as form as object , mlist as object)
dim feuille as form
set feuille = fro
dim mlist as listview
set mlist = miaou

il semble pas vouloir de listview : type defini par l'utilisateur non defini

ai essayer une lisbox
public function getcat(fro as object, blah as object)
dim feuille as form
set feuille=fro
dim listy as listbox
set listy = blah
feuille.listy.additem("i_m_sexy")

l'objet ne gere pas cette propriété ou cette methode
0
aiko74 Messages postés 22 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 17 novembre 2005
30 mars 2005 à 08:02
A ben oui merci, pas besoin du dim bouh as listbox.
Toujours aussi rapide les reponse

On sait jamais mais.... aurais tu une idée pour ceci:
http://www.vbfrance.com/forum.v2.aspx?ID=421261

Merchi bien une fois de plus
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
30 mars 2005 à 11:20
Non désolé, j'avais déjà lu ton post, mais je ne vois pas d'où peut venir le problème !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
Rejoignez-nous