Au secour, les copains sachant coder C et VB [Super RESOLU]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Au secour, les copains sachant coder C et VB [Super RESOLU]

Message par Kwai chang caine »

Bonjour à tous

Ce n'est pas mon habitude de faire un appel de la sorte :oops:
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 :twisted:

Alors voila, si l'un de vous, qui connais le VB, le C et evidemment le pure :lol: pouvait me donner juste un petit coup de pouce, je lui serais reconnaissant moi et 10 de mes générations qui me succederont :D

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 :cry:

http://www.purebasic.fr/english/viewtop ... 841#263841

Pourtant ce que je demande ça pourrait servir a d'autre je pense :roll:
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
Dernière modification par Kwai chang caine le ven. 17/oct./2008 18:49, modifié 2 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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....
Force et sagesse...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bah en fait, j'ai pas de code en C :lol:
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 :D 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 :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu ne dois pas faire une boucle sur le nombre d'éléments du tableau pour pouvoir avoir chaque valeur ?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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 8O
Peut etre que c'est aussi bette comme chou que ça ???

Je vais essayer de suite VRRRrrrrrrrroooouuummm !!!!
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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 :twisted:

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
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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...
Force et sagesse...
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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
:wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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 :D
Si ça c'est pas de la solidarité.......qu'est ce que c'est.
Ca fait chaud au coeur 8)
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 :twisted:
Heureusement que notre FRED, il passe jamais sur ce forum, pour une fois j'suis content qu'il ne lise pas ça :?
Dernière modification par Kwai chang caine le ven. 17/oct./2008 17:07, modifié 2 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message 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 .
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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 :wink:
Me v'la donc sauvé, on devrait y arriver à nous tous :lol:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message 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...
Répondre