Tableau string de VB à PB [Enfin 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

Tableau string de VB à PB [Enfin resolu]

Message par Kwai chang caine »

Bonjour à tous

Je lance un appel désespéré, car il y a plusieurs jours que je cherche à faire un truc qui parait assez simple au demeurant, mais en fait qui est super dur :cry:

Je suis toujours, comme depuis que je code en PB, assis entre deux chaises, enfin plutot entre la banquette VB et le tabouret PB :roll:
Pourquoi banquette VB, parce que lourd, gros, hors format, indeplaçable et PB tout le contraire et pourtant permettant de faire la meme chose...s'asseoir au final :?

Ayant un gros c..... j'arrive d'habitude à poser une fesse sur chaque :D

Au fil du temps, j'ai donc appris a passer :

1/ Une variable de PB à VB
2/Une variable de VB à PB
3/ Une variable string de PB à VB
4/Une variable string de VB à PB
5/Un tableau de PB à VB
6/Un tableau de VB à PB
7/Un tableau string de PB à VB

Mais VB n'est pas preteur....c'est la le moindre de ses défaut, alors KCC alla querir de l'aide chez VBFRANCE son forum :D
Il alla aussi quemander ...chez les français qui parlent pas français.

Bien des methodes il obtenu, grace à la générosité des divers membres, mais rien en fait de résolu.

1/ Une methode d'envoi en string de tout le tableau, séparé par un caractere defini, et resplitté dans la DLL PB

Exemple :

a.s(1) = "A"
a.s(2) = "B"
a.s(3) = "C"

String = "A" + chr(0) + "B" + chr(0) + "C"

J'avais trouvé cette methode tout seul....normal c'est la plus tocarde :oops:

2/J'ai donc recherché autre chose d'un peu plus "pro"
Une seconde methode m'a été donnée par THEARR en creant un second tableau de pointeur, dans VB et en l'envoyant dans PB.
Reste apres a relire la memoire aux adresses du tableau de pointeur

Partie VB

Code : Tout sélectionner

Private Declare Sub MyFunctionPB Lib "MyDll.dll" (ByRef MyArray As Long)

Public Sub Form_Load()

 Dim MyArrayVB(2) As String
 Dim MyArrayPB(2) As Long
 
 MyArrayVB(1) = "one"
 MyArrayVB(2) = "two"
 
 MyArrayPB(1) = StrPtr(MyArrayVB(1))
 MyArrayPB(2) = StrPtr(MyArrayVB(2))
 
 MyFunctionPB MyArrayPB(1) 'Send pointer to PB DLL function (ByRef)

End Sub
Partie PB

Code : Tout sélectionner

ProcedureDLL MyFunctionPB(*ArrayFromVB) 
 Dim MyArray.l(1) 
 CopyMemory(*ArrayFromVB, @MyArray(), 2*4) 
 MessageRequester(PeekS(MyArray(0)), PeekS(MyArray(1))) 
EndProcedure
J'etais super content car THEARR avait trouvé cette methode qui etait deja bien plus serieuse :D
Mais plusieurs problemes se sont profilé dans mon horizon

Deja je ne sais pas pour quelle raison, mais il fallait obligatoirement compiler la DLL en UNICODE 8O, sinon j'avais que la premiere lettre de chaque phrase.
Mais une fois compilé en UNICODE j'avais des phrases mais plusieures se repetait :?
Et en plus, comme j'envoi en meme temps une string simple alors la cette fois c'est la string qui est en carré :cry:

Rings m'a dit que les tableaux VB etait SAFEARRAY....KCC il etait drolement content y connaissait un nouveau mot pour epater ses collegues au boulot :D
Mais lui non plus y comprenait pas ce que ça voulait dire :oops:
Alors apres une valse de VarPtr, StrPtr, ANSI, UNICODE.....j'en passe et des meilleur...et bah KCC il est toujours dans le meme caca :cry:

Un gentil membre de VBFRANCE a bien voulu aider KCC.
Je tiens a dire que pour une fois, j'ai eu affaire a quelqu'un d'ouvert qui ne s'est pas barré en courant en entendant le mot PureBasic 8O
Il a fait l'effort de telecharger la version PB demo, mais elle ne fait pas les DLL et les API.
Apres de nombreux essais...il a abandonné et je trouve que deja il avait été super cool 8)

Par contre en dernier ressort.....il m'a donné ce code VB ou il faudrait adapter la procedure VB en procedure PB.

Code : Tout sélectionner

Private Sub  Command1_Click() 
    Dim xs(2) As String
    xs(0) = "Ligne 1"
    xs(1) = "Ligne 2"
    xs(2) = "Ligne 3"
    
    'appel méthode magique simulant la dll PB
    CloneStringArray VarPtr(xs(0)), UBound(xs)
End Sub
Partie a adapter en PB car ce serait ce qui est dans la DLL

Code : Tout sélectionner

Private Declare Sub  CopyMemory  Lib  "kernel32"  Alias  "RtlMoveMemory"  (pDst  As Any , pSrc  As Any ,  ByVal  ByteLen As Long ) 

'code à adapter en PureBasic....
Sub CloneStringArray(ByVal lhPointer As Long, ByVal lSize As Long)
    Dim saNew() As String
    ReDim saNew(lSize)
    
    CopyMemory ByVal VarPtr(saNew(0)), ByVal lhPointer, 12
    
    'test
    Dim i As Integer
    For i = LBound(saNew) To UBound(saNew)
        Debug.Print i & ". '" & saNew(i) & "'"
    Next i
End Sub
Alors voila.......KCC apres avoir essayé trois milliard de combinaison, épuré les forums of all the word.....y viens la queue entre les jambres demander si un de vous il aurait pas une idée, pour faire quelque chose de propre et de passer ce @#{[$£*µ de tableau de "Biiiiiip" qui commence à me briser les baluchettes, de VB à PB :?

Voila ma vie est entre vos mains :cry:

Merci d'avoir lu au moins jusque la
Bonne journée
Dernière modification par Kwai chang caine le lun. 08/juin/2009 13:04, modifié 2 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Salut KCC,

j'ai pas tout compris, c'est très confus dans ma tête.
Bon, réponds-moi et fais court (oui, non etc) !

Je voudrais comprendre

Tu as fait une dll en VB ou il y a les 2 tableaux, dll que tu veux ouvrir en PB ?

Si oui, dans ton fichier PB, il n'y a qu'une procedure, alors il est ou le code d'ouverture de la dll etc, ou alors j'ai rien compris. Quelle est la valeur du paramètre *AdresseTablo de la procedure FenetreTexte ?

J'y comprend rien :roll:

Explique simplement et reste pour l'instant sur le code de THEARR (à essayer en utilisant le mode gestion des threads)

Il faut du code complet PB, même qui ne marche pas.


A+
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour DENIS :D
J'ai un tableau en VB

Code : Tout sélectionner

Dim a(3) as String

a(1) = "Coucou"
a(2) = "J'suis un "
a(3) = "tableau dans VB"
Et je voudrais le retrouver en PB

Comme je l'ai dit au dessus, y'a la methode de mettre tous les elements tableau à la suite séparé d'un chr(0) ou autre....et envoyer la string.
Mais je cherche à envoyer le tableau VB avec une methode plus sure et plus "pro"
Et surtout sans compiler la DLL en UNICODE, car ça me fous en l'air plein d'autre fonctions que j'ai écrite dans ma DLL :cry:

J'ai fait au plus court :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Il faut du code complet PB, même qui ne marche pas.
Tu as normalement toute ma misere dans le ZIP :D
http://erdsjb.free.fr/TabloDll.zip

Y'a une embrouille ...une histoire d'UNICODE/ANSI et aussi de SAFEARRAY car c'est comme ça que VB gere ses tableau.
Mais j'y comprend rien du tout
http://www.purebasic.fr/english/viewtop ... 526#287526

http://www.purebasic.fr/english/viewtop ... 054#288054
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

String = "A" + chr(0) + "B" + chr(0) + "C"

J'avais trouvé cette methode tout seul....normal c'est la plus tocarde
pas du tout !! , au lieu de chr(0), moi j'aurai utilisé la virgule
et ensuite sous PB j'aurai utilisé Stringfield() :)

ça reste surement le plus simple :)


la methode la plus "tocarde" tu ne l'a pas donnée , elle consiste a passer par
un fichier !!

tu ecris un fichier, que PB relit !! ;)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Oui tu as raison, j'avais pas pensé à celle la :roll:
C'est donc peut etre que je m'ameliore :lol:

En fait dans cette methode ce qui me gene, c'est que si le tableau est monstrueux, bah ça risque de coincer dans une seule string.
Ca va vite, on a vite fait d'atteindre les MO, c'est un peu comme les etageres, une fois empilé, c'est pas impressionant mais quand tu pose tout par terre...et bah tu rempli ta chambre :D
En plus, je trouve quand meme plus sur, de pouvoir reproduire le meme tableau d'un coté comme de l'autre, on sait jamais ce qui va encore m'attendre sur ma longue route a la conquete du savoir :lol:

Mais c'est une histoire de dingue ce que c'est pas facile....
Tout ça encore a cause de bilou qui ne fait jamais les choses comme les autres :?
Deja passer un tableau de PB a VB, je me suis amusé....et encore j'ai surement la methode la meilleure.
Mais la....c'est le ponpon...

Meme les specialistes de VB s'accordent à dire que la gestion des tableau en VB c'est pas facile......alors je sais pas si tu vois le programme. :roll:
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

t'es obligé de passer par des dll ? ton programme en vb peux pas ouvrir un socket et se connecter par tcp au programme pb sur la même machine et tout balancer via les commandes réseau ?

moi je dis ça, je dis rien hein :)
ImageImage
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour CASE :D

Bah.....le reseau c'est passionant et deviens de plus en plus indispensable, pour plus tard devenir le principal support de tous les giciels.

Mais pour l'instant KCC y rame.........
Deja qu'il en est à 5% de connaissance de 1% des logiciels, y va pas trop s'attaquer au reseau.
Sauf pour l'indispensable MAJ des giciels, transfert de données entre PRG, etc...mais en restant le plus simple possible

Mon niveau reseau ???????...........moi la seule image qui se créé dans mon esprit quand j'ai lu le mot "socket" dans ton post, c'est un petit cylindre tricoté à la main obturé a un bout et que l'on a tendance à mettre au pied :roll:
Je pense que tu ne devais pas parler de ça ????? :D

En fait, j'ai cherché PB car VB ne me convenais pas, non portable, lourd, et surtout impossibilité de cree des DLL standard.
C'est pour cette raison, que j'ai choisi PB, car il peut etre un tres bon associé à VB, en outre de pouvoir evidemment faire aussi son chemin seul :wink:

En fait VB + PB, on fait peter la banque car chacun apporte à l'autre ce qui lui manque.
J'entend, evidemment pour des incultes comme moi :oops:
Car il est sur que juste le C suffirait à tout faire.
Mais grace à ces deux logiciels....toutes les fonctions que le C peut realiser, et bien une biroute comme moi peut les realiser.
Manque la rapidité.....mais dans l'utilitaire...la rapidité c'est pas trop le soucis principal, si ce n'est pour les bases de données, et qui maintenant se gerent toutes seules :D

Quoi qu'il en soit, je prefere toujours PB, et essai de le priviliegier au max, mais parfois a cause du boulot et de certaines demande que l'on me fait, je suis obligé de passer par VB, car cela reste malgré tout plus simple.Je pense particulierement à la gestion COM.

Donc pour tout te dire...parce que je sais pas si tu as remarqué.....mais j'aime bien tout dire :D
Mais souvent les gens y dorment avant la fin :roll:

Alors on me dit de faire court....et quand je fais court....on me demande pourquoi je fais ça ???? 8O
Alors j'en reviens a la case depart et je dis tout :lol:

En fait c'est tout simple, toujours donc dans ce projet de mariage P/VB, il ne peut y avoir qu'une DLL qui serait au milieu de ces deux etres.
C'est donc pour cette raison que depuis que je vous connais, j'essai toujours d'inserer mes codes dans une DLL
Afin que chacun d'eux profite indifferement, non seulement à tous mes programmes...mais aussi à chacun des languages :D

Et lorsque j'irais plus loin que l'ouverture de la boite du C, j'espere que je pourrais ajouter une troisieme personne à mon couple.
Apres tout maintenant la fidelité et les couples a trois c'est un peu de mode à notre epoque :lol:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Kwai chang caine a écrit :Bonjour DENIS :D
J'ai un tableau en VB

Code : Tout sélectionner

Dim a(3) as String

a(1) = "Coucou"
a(2) = "J'suis un "
a(3) = "tableau dans VB"
Et je voudrais le retrouver en PB

Comme je l'ai dit au dessus, y'a la methode de mettre tous les elements tableau à la suite séparé d'un chr(0) ou autre....et envoyer la string.
Mais je cherche à envoyer le tableau VB avec une methode plus sure et plus "pro"
Et surtout sans compiler la DLL en UNICODE, car ça me fous en l'air plein d'autre fonctions que j'ai écrite dans ma DLL :cry:

J'ai fait au plus court :D
Je veux bien chercher mais comme je ne comprend pas le problème et que tu ne répond pas à mes questions ...
J'ai bien compris le tableau VB à transmettre à PB mais dans la pratique, comment on lance le code PB que tu as mis dans l'archive ? etc ect ect ...
comment est ouverte la dll etc ect ect ect ect ect etc etc ect ect ect ect ect etc etc ect ect ect ect ect etc etc ect ect ect ect ect etc
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Mon bon DENIS :D
J'ai bien compris le tableau VB à transmettre à PB mais dans la pratique, comment on lance le code PB que tu as mis dans l'archive
Bah on le "lance" pas , puisque c'est une DLL 8O
On appelle la DLL par VB.

Elle est declaré par cette instruction dans VB, car VB il faut declarer une instruction avant de l'utiliser :?

Code : Tout sélectionner

Private Declare Function FenetreTexte Lib "MyDll.dll" (ByVal Titre As String, ByRef Texte() As String, Optional ByVal Couleur As Long, Optional ByVal Graphique As Integer) As Long
Apres je rempli le tableau dans VB

Code : Tout sélectionner

Dim Tablo(20) As String
 Tablo(0) = "Hello...i'm KCC"
 Tablo(1) = "Hello...i'm KCC"
 Tablo(2) = "i'm locked in VB :-("
 Tablo(3) = "and i want to jump in PB :-)"
 
 For i = 4 To 14
  Tablo(i) = "Line " + Str(i)
 Next
Je créé un tablo de pointeur de la meme taille que le tablo de string, qui contiendra l'adresse de chaque pointeur de chaque enregistrement du tableau de string

Code : Tout sélectionner

Dim TabloPointeur() As Long
ReDim TabloPointeur(UBound(Tablo))
TabloPointeur(0) = UBound(Tablo)
Et c'est la que le bas blesse :cry:
Car je charge ce tableau de pointeur des adresses du tableau de string.
Mais apparement, VB ne gere pas ses tableaux comme PB.
L'histoire de safearray ou unicode/ansi enfin un truc comme ça, fait que les adresses que je met dans le tablo ne sont pas bonnew, enfin je pense. :roll:

J'ai fait une premiere methode comme ça

Code : Tout sélectionner

For i = 1 To UBound(Tablo)
 TabloPointeur(i) = StrPtr(Tablo(i))
Next
Une seconde methode comme ça, et pas mieux

Code : Tout sélectionner

For i = 1 To UBound(Tablo)
  MyStr = StrConv(Tablo(i), vbUnicode)
  TabloPointeur(i) = StrPtr(MyStr)
 Next
J'ai essayé aussi, et que néni

Code : Tout sélectionner

For i = 1 To UBound(Tablo)
 TabloPointeur(i) = VarPtr(Tablo(i))
Next
Puis apres, j'appelle la fonction dans la DLL PB, en lui envoyant ce que je croit etre le tablo de pointeur, mais dont je ne suis pas sur.

Code : Tout sélectionner

FenetreTexte TitreFenetre, TabloPointeur, CouleurTablo, Graphique
Car normalement comme j'ai déclaré "ByRef Texte() As String" ça devrait marcher :roll:
Mais qu'est ce que VB envoi réellement ????
Car dans la declaration aussi, j'ai essayé plein de truc :

Code : Tout sélectionner

ByRef Texte() As String
ByVal Texte As Long
Texte As Byte
Et je suis paumé, car je sais pas reconnaitre ce qu'envoi VB :oops:

De son coté la DLL, est censé obtenir le tablo de pointeur....mais ça ne marche qu'en compilation UNICODE et encore pas completement

Code : Tout sélectionner

ProcedureDLL FenetreTexte(Titre.s, *AdresseTablo, Couleur = #Black, Graphique = #False)
 Dim MyArray.l(1) 
 SizeOfArray.l = PeekL(*AdresseTablo)
 ReDim MyArray(SizeOfArray)
 CopyMemory(*AdresseTablo, @MyArray(), SizeOfArray * 4) 
Je créé un tableau de pointeur vide propore à la DLL

Code : Tout sélectionner

Dim MyArray.l(1)
Je recupere dans l'element 0, du tableau de pointeur la longueur du tableau

Code : Tout sélectionner

SizeOfArray.l = PeekL(*AdresseTablo)
Je redimensionne le tebleau de pointeur de la DLL

Code : Tout sélectionner

ReDim MyArray(SizeOfArray)
Et je copie la mémoire de la longueur du tablo x 4 que je transfert dans mon nouveau tablo de pointeur dans ma DLL

Code : Tout sélectionner

CopyMemory(*AdresseTablo, @MyArray(), SizeOfArray * 4)
Je devrais donc avoir normalement le meme tablo de pointeur qui est dans VB, mais la j'en doute :roll:

Et apres, je rempli mon listview par les variables qui sont sous les pointeur de mon tablo de pointeur de la DLL

Code : Tout sélectionner

 AddGadgetItem(#ListviewTexte, - 1, ReplaceString(PeekS(MyArray(i)), Chr(13), ""))
Voila, cette fois......j'ai été obligé de faire long, et j'espere que je t'ai tout dis ce que tu voulais savoir.......tout mon jardin secret.....j'ai plus aucune intimité....j'suis à poil...tu sais tout :lol:

Y'a uassi une histoire de BSTR en plus de SafeArray, UNICODE et ANSI, j'ai lu ça dans un forum US ou justement il voulait aussi lire des strings venant de VB.
J'ai aussi essayé de rajouter cette fonction de FREAK
Et c'est pire....donc c'est surement pas ça non plus

Code : Tout sélectionner

Procedure.s ReadBSTR(bstr) ; by Fr34k 
  length = WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, 0, 0, 0, 0) 
  Text$ = Space(length) 
  WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, @Text$, length, 0, 0)    
  ProcedureReturn Text$ 
EndProcedure 
En fait y'a quelques codes pour recuperer des strings...meme je n'en ai pas trouvé pour les tableaux de strings, du fait de la maniere speciale ou VB les gere :?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je savais bien que je n'avais pas compris le problème correctement.
Si j'ai du temps cet après-midi, je testerais des trucs.

A+
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci beaucoup DENIS 8)

En fait le probleme, c'est que dans VB, entre les :

StrPtr, Varptr
StrConv(MyArrayVB(0), vbFromUnicode) Doit je le mettre ou pas ????
Byval, ByRef
Ansi, Unicode
Long, Byte, String
TabloString, TabloString(), TabloString(0)

Tu rajoute cette histoire de SafeArray ou ils en parlent ici:
http://www.purebasic.fr/english/viewtop ... =safearray
et de BSTR
http://www.purebasic.fr/english/viewtop ... 999#255999

Bah ça fait des centaines de possibiltées presque comme au LOTO
Pour que ce soit les bons pointeurs qui arrivent à la DLL PB :cry:

Moi j'ai essayé et continue des dizaines de possibilités qui la plupart du temps Scrash VB6 :oops:

Code : Tout sélectionner

' Declaration pour Methode1
Private Declare Function FenetreTexte Lib "MyDll.dll" (ByVal Titre As String, ByRef TabloTexte As Long, Optional ByVal Couleur As Long, Optional ByVal Graphique As Integer) As Long

' Declaration pour Methode2
'Private Declare Function FenetreTexte Lib "MyDll.dll" (ByVal Titre As String, ByVal TabloTexte As Long, Optional ByVal Couleur As Long, Optional ByVal Graphique As Integer) As Long

' Declaration pour Methode3
'Private Declare Function FenetreTexte Lib "MyDll.dll" (ByVal Titre As String, ByVal TabloTexte As Byte, Optional ByVal Couleur As Long, Optional ByVal Graphique As Integer) As Long

Private Sub Form_Load()
 
 Methode1
 'Methode2
 'Methode3
 
End Sub

Private Sub Methode1()
    
 Dim TabloString(20) As String, MaxTabloString As Long, TabloPointeur() As Long
 TabloString(0) = "Hello..."
 TabloString(1) = "i'm KCC"
 TabloString(2) = "i'm locked in VB :-("
 TabloString(3) = "and i want to jump in PB :-)"
 
 For i = 4 To 14
  TabloString(i) = "Line " + Str(i)
 Next
 
 MaxTabloString = UBound(TabloString)
  
 ReDim TabloPointeur(MaxTabloString)
 TabloPointeur(0) = MaxTabloString
 
 For i = 1 To MaxTabloString
  TabloPointeur(i) = VarPtr(TabloString(i))
 Next
  
 FenetreTexte TitreFenetre, TabloPointeur, CouleurTablo, Graphique
 
End Sub

Private Sub Methode2()
  
 Dim TabloString(20) As String, MaxTabloString As Long, TabloPointeur() As Long
 TabloString(0) = "Hello..."
 TabloString(1) = "i'm KCC"
 TabloString(2) = "i'm locked in VB :-("
 TabloString(3) = "and i want to jump in PB :-)"
 
 For i = 4 To 14
  TabloString(i) = "Line " + Str(i)
 Next
 
 MaxTabloString = UBound(TabloString)
  
 ReDim TabloPointeur(MaxTabloString)
 TabloPointeur(0) = MaxTabloString
 
 For i = 1 To MaxTabloString
  TabloPointeur(i) = VarPtr(TabloString(i))
 Next
 
 FenetreTexte TitreFenetre, TabloPointeur(0), CouleurTablo, Graphique
 
End Sub

Private Sub Methode3()
  
 Dim TabloString(20) As String, MaxTabloString As Long, TabloPointeur() As Long
 TabloString(0) = "Hello..."
 TabloString(1) = "i'm KCC"
 TabloString(2) = "i'm locked in VB :-("
 TabloString(3) = "and i want to jump in PB :-)"
 
 For i = 4 To 14
  TabloString(i) = "Line " + Str(i)
 Next
 
 MaxTabloString = UBound(TabloString)
  
 ReDim TabloPointeur(MaxTabloString)
 TabloPointeur(0) = MaxTabloString
 
 For i = 1 To MaxTabloString
  TabloPointeur(i) = StrPtr(TabloString(i))
 Next
 
 FenetreTexte TitreFenetre, TabloPointeur(0), CouleurTablo, Graphique
 
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 »

J'ai eu une reponse, de THEARR juste maintenant et apprement ça a l'air de marcher.
Mais c'est un peu tard pour ce soir, j'suis dégouté demain levé à 4 h du mat, et pas encore mangé :?

Je regarderais tout ça demain et vous tiendrais au courant parce que le divorce approche :oops:

Code : Tout sélectionner

Procedure.s PeekBSTR(*BSTR) 
  lenBSTR=PeekL(*BSTR-4)/2 
  Dim Char.c(lenBSTR) 
  For i=0 To lenBSTR 
    Char(i)=PeekC(*BSTR+i*2) 
  Next i 
  ProcedureReturn PeekS(@Char(0)) 
EndProcedure 

;Change MessageRequester(PeekS(MyArray(0)), PeekS(MyArray(1))) to 
;MessageRequester(PeekBSTR(MyArray(0)), PeekBSTR(MyArray(1))) 
Bonne nuit
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon comme promis, me revoila ventre tendu et bien "dormu" :D

Alors j'ai pu appliquer ce que m'a donné THEARR et effectivement ça marche 8O

8 jours de recherche, toutes les larmes de mon corp pour presque une ligne.
Alors comme a cause de la pollution, les glaçons qui sont dans la mer en antartique y fondent et que y'a trop d'eau sur terre :?
Et ben, c'est pas la peine qu'un frere du forum, y pleure autant que moi, pour chercher un jour, et donc y remonte encore un peu plus l'eau de la terre :?

Je vais donc pour sauver la planete donner le code qui permet que "cite pitite counirie di fourmi" de VB y soit preteuse envers le grand PB.

Vous allez voir c'est pas impressionnant comme code, mais drolement efficace.
Ce qui prouve a nouveau qu'en programmation c'est comme dans la vie....c'est pas les plus grandes qui sont les plus efficaces :D

Code VB

Code : Tout sélectionner

Private Declare Function FenetreTexte Lib "MyDll.dll" (ByVal Titre As String, ByRef Texte As Long) As Long

Private Sub Form_Load()

 Dim TabloVB(15) As String

 TabloVB(1) = "Hello...i'm KCC"
 TabloVB(2) = "i'm locked in VB :-("
 TabloVB(3) = "and i want to jump in PB :-)"
 
 For i = 4 To 14
  TabloVB(i) = "Line " + Str(i)
 Next
  
 Dim TabloPointeur() As Long, MaxTablo As Integer
 MaxTablo = UBound(TabloVB)
 ReDim TabloPointeur(0 To MaxTablo) As Long
 TabloPointeur(0) = MaxTablo
 
 For i = 1 To MaxTablo
  TabloPointeur(i) = StrPtr(TabloVB(i))
 Next
  
 FenetreTexte "Fenetre tableau", TabloPointeur(0)
 
End Sub
Code PB

Code : Tout sélectionner

Procedure.s PeekBSTR(*BSTR) 
  lenBSTR=PeekL(*BSTR-4)/2 
  Dim Char.c(lenBSTR) 
  For i=0 To lenBSTR 
    Char(i)=PeekC(*BSTR+i*2) 
  Next i 
  ProcedureReturn PeekS(@Char(0)) 
EndProcedure 

ProcedureDLL FenetreTexte(Titre.s, *AdresseTablo)
  
 Dim MyArray.l(1)
 SizeOfArray.l = PeekL(*AdresseTablo)
 ReDim MyArray.l(SizeOfArray)
 CopyMemory(*AdresseTablo, @MyArray(), SizeOfArray * 4) 
 
 For i = 1 To SizeOfArray - 1
  TabloDll.s  + PeekBSTR(MyArray(i)) + Chr(13)
 Next 
 
 MessageRequester("C'est magique, m'vl'a dans la DLL", TabloDll)
 
EndProcedure
Je tiens a remercier milles fois mon ami DENIS, qui m'a tendu la main comme d'habitude, quand je suis noir dans le desespoir 8)
Ainsi que tous ceux qui ont peut etre prié dans leur coin pour que KCC y trouve cette nouvelle enigne de l'humanité :D

Bonne journée à tous
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

J'avais fraichement installé Visual Basic express edition 2008 ce matin avant d'aller au boulot.

Pas grave, ça me permet de me remettre sur ces merdes de fichier rc et porc.exe qui me casse les c... depuis plusieurs jours. :roll:
Répondre