Page 1 sur 2
Au secour, les copains sachant coder C et VB [Super RESOLU]
Publié : ven. 17/oct./2008 15:51
par Kwai chang caine
Bonjour à tous
Ce n'est pas mon habitude de faire un appel de la sorte
Mais la j'sais plus quoi faire !!
Comme dab, a cause de ce crosoft de "Biiiiiip", j'suis le cul entre deux chaises.
Cet abruti qui veut jamais faire comme tout le monde commence a me les briser menu menu
Alors voila, si l'un de vous, qui connais le VB, le C et evidemment le pure

pouvait me donner juste un petit coup de pouce, je lui serais reconnaissant moi et 10 de mes générations qui me succederont
Voila ça fait noir de temps que j'essais de rappatrier un tableau de string de ce
#[|¤£*¤@ de VB de
|¤µ&§%ù à la
"Biiiiip"
Mais les codeurs de VB y sont pas cool comme vous, ils ne prechent que pour leur paroisse, y'a que VB et le C, le reste c'est de la M......
http://www.vbfrance.com/forum/sujet-PAS ... 1.aspx?p=2
Donc, je suis encore une fois obligé de me retourner vers mes copains et de vous deranger à nouveau, car j'ai essayé sur le forum des français d'en face qui parlent pas français et j'ai pas eu de reponse satisfaisante non plus
http://www.purebasic.fr/english/viewtop ... 841#263841
Pourtant ce que je demande ça pourrait servir a d'autre je pense
Car je sais recuperer un string de pure a VB, mais pas un tableau.
Voila, je vous remercie par avance
Et vous souhaite une excelente journée
Publié : ven. 17/oct./2008 16:06
par Anonyme2
Commences par mettre ici tout ton bazard en français avec le code VB/C que tu as et ce que tu veux faire.
Je ne connais pas grand chose au C, mais à plusieurs on peut y arriver
Publié : ven. 17/oct./2008 16:13
par tmyke
Si j'ai bien compris, tu récupères un pointeur de chaine après l'appel de ta fonction DLL ?
si c'est le cas, un petit code comme cela peut peut-être faire l'affaire?
Code : Tout sélectionner
*adr.l = FuncDLL()
text$=""
Repeat
c = PeekC(*adr)
text$ = text$ + Chr(c)
*adr = *adr + 1
Until c=0
Debug text$
je ne me souviens plus, mais je crois qu'il y a moyen de faire encore plus simple et plus court
par transfert de pointeurs....
Publié : ven. 17/oct./2008 16:15
par Kwai chang caine
Bah en fait, j'ai pas de code en C
J'suis fidele à notre PB.
Mais c'est le codeur de VB qui me parle de C
Mois, je fais comme dab, le grand PB

et la daub de VB
Donc voici les deux codes
PB
Code : Tout sélectionner
ProcedureDLL LeTablo()
Static Dim Tablo.s(4)
Tablo(0) = "Pure"
Tablo(1) = "is "
Tablo(2) = "your"
Tablo(3) = "friend"
ProcedureReturn @Tablo(0)
EndProcedure
VB
Code : Tout sélectionner
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString1 As Any) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Any) As Long
Private Declare Function LeTablo Lib "c:\EssaiTablo.dll" () As Long
Public Function StringDLL(Variable)
Dim RetourAdresse As Long, RetourDll As String
RetourAdresse = Variable
RetourDll = Space$(lstrlen(RetourAdresse))
lstrcpy RetourDll, RetourAdresse
StringDLL = RetourDll
End Function
Private Sub Form_Load()
EssaihWnd = LoadLibrary("c:\EssaiTablo.dll")
Debug.Print StringDLL(LeTablo())
FreeLibrary (EssaihWnd)
End Sub
Avec ça en une journée de recherche, je suis déja arrivé a retourner le premier mot "Pure", mais il doit y avoir un caractere de daub style chr(0) ou autre qui m'empeche d'avoir la suite du tableau
Sur les deux liens que j'ai mis y'a tous les autres essais que j'ai fait.
Merci de ton aide, enfin quelqu'un de chaleureux

Publié : ven. 17/oct./2008 16:18
par Anonyme2
Tu ne dois pas faire une boucle sur le nombre d'éléments du tableau pour pouvoir avoir chaque valeur ?
Publié : ven. 17/oct./2008 16:19
par Kwai chang caine
Si j'ai bien compris, tu récupères un pointeur de chaine après l'appel de ta fonction DLL ?
si c'est le cas, un petit code comme cela peut peut-être faire l'affaire?
Code:
*adr.l = FuncDLL()
text$=""
Repeat
c = PeekC(*adr)
text$ = text$ + Chr(c)
*adr = *adr + 1
Until c=0
Debug text$
Bonjour Tmyke
Bah mon gros probleme, c'est le code VB.
Et chez VB y veulent pas m'aider car ils disent que ma DLL c'est de la daub et qu'ils savent que parler a des DLL en C
Donc voila pourquoi, j'avais besoin de quelqu'un qui connaisse PB, C, et VB pour pouvoir rappatrier ce tableau de la DLL pure à mon programme VB
Publié : ven. 17/oct./2008 16:20
par Kwai chang caine
Tu ne dois pas faire une boucle sur le nombre d'éléments du tableau pour pouvoir avoir chaque valeur ?
T'as raison
Peut etre que c'est aussi bette comme chou que ça ???
Je vais essayer de suite
VRRRrrrrrrrroooouuummm !!!!
Publié : ven. 17/oct./2008 16:23
par Kwai chang caine
Eh bah non, ça aurait été trop beau et trop facile pour BILL
Ca me remonte 4 fois le mot programming
Code : Tout sélectionner
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString1 As Any) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Any) As Long
Private Declare Function LeTablo Lib "c:\EssaiTablo.dll" () As Long
Public Function StringDLL(Variable)
Dim RetourAdresse As Long, RetourDll As String
RetourAdresse = Variable
RetourDll = Space$(lstrlen(RetourAdresse))
lstrcpy RetourDll, RetourAdresse
StringDLL = RetourDll
End Function
Private Sub Form_Load()
Dim EssaihWnd As Long, RetourDll As Long
EssaihWnd = LoadLibrary("c:\EssaiTablo.dll")
For i = 1 To 4
Debug.Print StringDLL(LeTablo())
Next
FreeLibrary (EssaihWnd)
End Sub
Publié : ven. 17/oct./2008 16:46
par tmyke
Oui, en fait j'ai répondu trop vite et je n'ai vraiment vue que tu voulais rapatrier un tableau,
je vais voir sur mon compilateur C++ si je peux pondre un truc qui puisse t'aider...
Publié : ven. 17/oct./2008 16:48
par erix14
Code : Tout sélectionner
ProcedureDLL LeTablo()
Static Dim Tablo.s(4)
Tablo(0) = "Programming"
Tablo(1) = "is "
Tablo(2) = "your"
Tablo(3) = "friend"
ProcedureReturn @Tablo()
EndProcedure
Code : Tout sélectionner
Prototype.l LeTablo()
Global LeTablo.LeTablo
Define hdll.l
hdll = OpenLibrary(#PB_Any, "MaDLL.dll")
Structure TString
Tablo.String[0]
EndStructure
If hdll
LeTablo = GetFunction(hdll, "LeTablo")
*Chaine.TString = LeTablo()
Debug *Chaine\Tablo[0]\s
Debug *Chaine\Tablo[1]\s
Debug *Chaine\Tablo[2]\s
Debug *Chaine\Tablo[3]\s
CloseLibrary(hdll)
EndIf

Publié : ven. 17/oct./2008 16:53
par Kwai chang caine
Oui, en fait j'ai répondu trop vite et je n'ai vraiment vue que tu voulais rapatrier un tableau,
je vais voir sur mon compilateur C++ si je peux pondre un truc qui puisse t'aider...
Merci Tmyke, mais c'est pas en C que je veux le code, mais en VB
Car le code que je vous donne c'est du VB pas du C
Code : Tout sélectionner
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString1 As Any) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Any) As Long
Private Declare Function LeTablo Lib "c:\EssaiTablo.dll" () As Long
Public Function StringDLL(Variable)
Dim RetourAdresse As Long, RetourDll As String
RetourAdresse = Variable
RetourDll = Space$(lstrlen(RetourAdresse))
lstrcpy RetourDll, RetourAdresse
StringDLL = RetourDll
End Function
Private Sub Form_Load()
Dim EssaihWnd As Long, RetourDll As Long
EssaihWnd = LoadLibrary("c:\EssaiTablo.dll")
For i = 1 To 4
Debug.Print StringDLL(LeTablo())
Next
FreeLibrary (EssaihWnd)
End Sub
Publié : ven. 17/oct./2008 16:57
par Kwai chang caine
Bonjour ERIX14 , content de te parler aussi
J'suis content parce que il suffit de faire un appel au secour, pour voir tous ceux qui ne postent presque jamais rappliquer
Si ça c'est pas de la solidarité.......qu'est ce que c'est.
Ca fait chaud au coeur
C'est aussi ça "The power of PURE"
Merci donc pour ton code, mais la recup, je la voudrais en VB.
Je sais que on est pas sur forum VB, mais sur le forum VB, ils comprenent rien a PB, et encore moins a ses DLL.
Et y parait qu'avec VB, c'est déja pas de la nouille de recuperer un tableau de string d'une DLL en C, alors d'une DLL en Pure.....
Tu te rend compte qu'il a osé dire de la DLL de FRED que c'etait de la daube
Heureusement que notre FRED, il passe jamais sur ce forum, pour une fois j'suis content qu'il ne lise pas ça

Publié : ven. 17/oct./2008 17:01
par jbernard13
hello Kwai
je suis d'accord avec toi Purebasic est trop trop bon
Vb est moins bien , je m'en sert que pour apprendre la programation .
Publié : ven. 17/oct./2008 17:04
par Kwai chang caine
Alors la on est au top de la solidarité, a coté les restos du coeur, c'est de la gnognote, meme Bernard il arrive, salut bernard
Me v'la donc sauvé, on devrait y arriver à nous tous

Publié : ven. 17/oct./2008 17:19
par erix14
Je ne peux pas te faire le code en VB, car je ne l'ai pas sur mon ordi. Mais tu as maintenant un code en PureBasic qui marche, il suffit de le traduire. Tu as vu, j'ai changé "ProcedureReturn @Tablo(0)" en "ProcedureReturn @Tablo()", car tu retournais seulement la première chaine. Il vaut mieux retourner le pointeur du tableau de chaine pour avoir les 4 chaines...