Envoi d'un tableau de strings à une DLL standard [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Bonjour à tous

Voila j'aurais aimé avoir votre avis d'expert sur cete opération.
Je veux passer un tableau complet de strings à une DLL standard, que je réalise avec un language qui n'est ni VB ni C.

Cela fonctionne correctement, mais je suis obligé de passer par un tableau de pointeur dans lequel je depose chaque adresse de chaque string du tableau.

J'aimerais juste savoir si quelqu'un aurait une autre méthode.
Voici donc le code qui fonctionne :

Dim TabloString(3) as String
X = 0X X + 1: TabloString(X) "Coucou"X X + 1: TabloString(X) "Je suis un "X X + 1: TabloString(X) "tableau de string"

Dim TabloPointeur() As Long
ReDim TabloPointeur(0 To X) As Long
TabloPointeur(0) = X
 
For i = 1 To X
 TabloPointeur(i) = StrPtr(TabloString(i))
Next
 
FonctionDll TabloPointeur(0)

Je vous remercie de votre aide
Bonne journée

50 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
pas grave pour le temps de réponse

par contre on ne s'est peut-être pas bien compris...

problèmes pour moi (moi d'abord ) :

*langage = PureBasic (que je ne connais pas)

*IDE = PureBasic version Démo, ne compile pas, n'accepte pas les API, et accessoirement limité à 800 lignes de code, mais comme de toute façon il compile pas... :)

*on passe à jaPBe gratuit = n'accepte pas les API, ne compile en VRAIES DLL

*essayé de code sous notepad et de jouer avec le copilo de PB directement =>
******************************************
PureBasic 4.31 (Windows - x86) Demo
******************************************

Compiling mydll.pb
Loading external libraries...
Starting compilation...
45 lines processed.
Creating and launching executable.

- Feel the ..PuRe.. Power -

espoir?
beh non, pas pour autant
je dois pas être loin mais bon, çà me gave un peu là !!!

et comme après tout on est sur un forum VB et qu'au final je n'ai donc aucun moyen de t'aider en PB, il n'y a plus grand chose à faire tu ne crois pas?...



problèmes pour toi :




ton but est de passer un tableau de STRING de VB6 à une VRAIE DLL
une vraie dll n'a pas de tableau BSTR comme VB, on doit donc passer par un pointeur de tableau

or de ton côté tu passes un tableau d'adresses, ce qui rallonge considérablement le code, le temps d'execution etc....

voici donc en VB6 une solution comparable, pour jouer avec un tableau de string :






Private Declare Sub 
CopyMemory 
Lib 
"kernel32" 
Alias 
"RtlMoveMemory" 
(pDst 
As Any
, pSrc 
As Any

ByVal 
ByteLen
As Long
)




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

'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





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>






à bientôt
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
salut,
tu devrais envoyer le pointeur du tableau, pas un tableau des pointeurs de chaque chaine

Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long


FonctionDll byval
VarPtrAny(
TabloString
(0)
)

(après faut voir la dll en question )
++
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Bonjour PCPT, je suis content de te reparler :-)

Je suis perdu entre les pointeurs, les tableaux de pointeurs, l'unicode etc....

Je suis donc, au prix de 2 litres de sueur, arrivé a faire ecrire ma fenetre....mais je suis sur que comme tu le dit, y'a surement autre chose que d'envoyer un tableau de pointeurs

Voici donc ou j'en suis

Private Declare Function FenetreTexte Lib "c:\mydll.dll" (ByVal Titre As String, ByRef TabloTexte As Long, Optional ByVal Couleur As Long, Optional ByVal Graphique As Integer) As Long
'Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
Private Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long



' Ne marche pas
' *************



'Public Sub Form_Load()
'
' Dim TabloString(1 To 3) As String
' TabloString(1) = "Bonjour"
' TabloString(2) = "je suis un tableau VB"
' TabloString(3) = "et je veux sauter dans une DLL :-)"
' 'FenetreTexte "Coucou", VarPtrArray(Tablo), 0, 0
' FenetreTexte "Coucou", ByVal VarPtrAny(TabloString(1)), 0, 0
'
'End Sub



' Marche bien
' ***********



Public Sub Form_Load()



 Dim TabloString(1 To 3) As String
 TabloString(1) = "Bonjour"
 TabloString(2) = "je suis un tableau VB"
 TabloString(3) = "et je veux sauter dans une DLL :-)"
 AfficheTabloInfo "Coucou", TabloString, 0, 0



End Sub



Public Function AfficheTabloInfo(TitreFenetre As String, TabloVB() As String, Optional CouleurTablo As Integer, Optional Graphique As Integer)
 
 Dim TabloPointeur() As Long, MaxTablo As Integer
 MaxTablo = UBound(TabloVB)
 ReDim TabloPointeur(0 To MaxTablo) As Long
 TabloPointeur(0) = MaxTablo + 1
 
 For i = 1 To MaxTablo
  MyStr = StrConv(TabloVB(i), vbFromUnicode)
  TabloPointeur(i) = StrPtr(MyStr)
 Next
 
 FenetreTexte TitreFenetre, TabloPointeur(0), CouleurTablo, Graphique
  
End Function


Et voici la DLL qui n'a qu'une fonction

http://erdsjb.free.fr/MyDll.dllhttp://erdsjb.free.fr/Mydll.dll

Encore merci de ta precieuse aide
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Pour la DLL, j'ai merdé, c'est le premier lien qui est le bon :-(
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
mais dans ta dll, le long correspond à quoi, le pointeur d'un safearray?

parce que :



VARPTRSTRINGARRAY


VarPtrStringArray gets the address of an array of Strings. To avoid the
intrinsic

UNICODE/ANSI conversion performed by Visual Basic, the declaration has
to be

defined in a type library.


Alternatively, you could use the MIDL compiler to compile your own type
library

from the following .odl files.


For Visual Basic 6.0, create a text file named VB6ptrlib.odl with the
content

below:


#define RTCALL _stdcall

[

uuid(C6799410-4431-11d2-A7F1-00A0C91110C3),

lcid (0), version(6.0), helpstring("VarPtrStringArray Support for
VB6")

]

library PtrLib

{

importlib ("stdole2.tlb");

[dllname("msvbvm60.dll")]

module ArrayPtr

{

[entry("VarPtr")]

long RTCALL VarPtrStringArray([in] SAFEARRAY (BSTR) *Ptr);

}

}







sinon oui, un tableau de LONG serait attendu ^^

ps : quand on joue avec les pointeurs sur un tableau, on doit impérativement le déclarer commençant à 0


Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Non je ne crois pas, en fait j'y connais pas grand chose :-(
C'est une adresse memoire que la DLL attend, l'adresse de debut du tableau de pointeurs que VB a contruit

Apres je lis la memoire a partir de l'adresse que la DLL reoit.
Les 4 premiers octets, je les garde pour renseigner la longueur du tableau, l'enregistrement 0
Et apres je lis "longueur du tableau x 4" octets que je transfere a l'adresse d'un tableau qui est dans la DLL
Puis je fait une lecture avec l'instruction PEEK de chaque enregistrement du tableau de pointeur dans la DLL qui me transforme l'adresse en string
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
ok, je résume, tu as une vraie dll avec ou sans sa source et tu veux l'utiliser "comme tu veux" sans respecter ses attentes?

quelque chose m'échappe....
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Non non, je me suis mal exprimé.
Voila la DLL c'est moi qui la fait, mais pas avec le C, ni avec VB car VB6 ne sait pas faire de DLL standard.
Normalement elle repond au meme standard que celles du C, elle utilise STDCALL comme appel.
Je n'y connais pas grand chose en DLL et rien en C malheureusement, pour moi ....le C c'est du domaine du reve, ça fait des années que j'achete les livres et les languages et que je n'y comprend pas grand chose :-(

Donc la DLL que je t'ai donné contiens une seule fonction, celle que j'appelle qui ouvre une fenetre et rempli une listbox du tableau de string que tu lui envoi.
Enfin pour etre plus precis....du tableau de pointeur que tu lui envoi.
Comme je te l'ai expliqué au dessus
C'est une adresse memoire que la DLL attend, l'adresse de debut du tableau de pointeurs que VB a contruit

Apres je lis la memoire a partir de l'adresse que la DLL reçoit.
Les 4 premiers octets, je les garde pour renseigner la longueur du tableau, l'enregistrement 0
Et apres je lis "longueur du tableau x 4" octets que je transfere a l'adresse d'un tableau qui est dans la DLL
Puis
je fait une lecture avec l'instruction PEEK de chaque enregistrement du
tableau de pointeur dans la DLL qui me transforme l'adresse en string

Mon probleme c'est que je peux compiler cette DLL en mode UNICODE ou bien ANSI.
Etand donné que le tableau VB que je lui envoi est apparement UNICODE par defaut et bien ma DLL qui est ANSI par defaut, ne le comprend pas, par contre elle inscrit bien le titre de la fenetre. TitreFenetre As String
Mais si je la compile en UNICODE alors cette fois c'est le titre string TitreFenetre As String qui ne passe pas et le tableau oui, c'est rageant

Moi ce que je voudrais c'est pouvoir envoyer a cette DLL le tableau de pointeur de mon tableau string mais en ANSI
J'ai essayé avec StrConv(TabloVB(i), vbFromUnicode) mais apparement ça ne marche pas et je ne sais pas pourquoi :-(
Est ce la bonne methode pour convertir en ANSI, car je prefererais convertir en ANSI dans VB que modifier ma DLL
Je sais c'est pas simple.....alors imagine pour moi :-(

En tout cas merci de t'interesser à mon cas perdu :-)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
pourquoi et/ou comment as-tu codé, dans ta dll, une fonction devant recevoir un tableau LONG de pointeurs LONG (ce dans un langage apparemment top secret ^^)

étant l'auteur de la mystérieuse dll, ne peux-tu pas modifier le code pour (au plus simple) passer par le pointeur 0 du tableau ?

ps : pourquoi stoquer la taille en 0 ?... à partir du moment où le tableau n'est pas null, tous les langages savent récupérer la taille d'un tableau de type N

pss : normal que tu aies un problème ANSI avec un "chaine(ansi/ascii)" vers "unicode vers ascii"
tu converties une chaine non unicode
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
pss : normal que tu aies un problème ANSI avec un "chaine(ansi/ascii)" vers "unicode vers ascii"
tu converties une chaine non unicode


Bah j'y comprend plus rien.....j'avais lu sur les forum que VB gerait en UNICODE :-(
Et quand je compile ma DLL en unicode ça marche, alors bettement je me suis dit que ce devait etre de l'unicode que VB envoi

En fin de compte, mon idée est de passer a une DLL standard un tableau de string.
On m'a dit que le plus simple serait de creer un tableau de long contenant les adresses des pointeurs de mon tableau de string et de d'envoyer l'adrresse du tableau (0) contenant les pointeurs en faisant cette methode.

For i = 1 To MaxTablo
  TabloPointeur(i) = StrPtr(TabloVB(i))
 Next
 
 FenetreTexte TitreFenetre, TabloPointeur(0), CouleurTablo, Graphique

C'est donc ce que j'ai fait, j'etait satisfait mais j'ai vu que je n'avais que la premiere lettre de chaque phrase
On m'a conseillé de compiler ma DLL en UNICODE
C'est ce que j'ai fait, et la ça a marché :-)
J'etais donc content, mais je me suis apperçu que cette fois en UNICODE ma DLL lisait bien le tableau mais plus la variable "TitreFenetre"

Alors c'est pourquoi j'ai eu l'idée de demander à des experts en VB comme vous si il y avait une methode pour transmettre un tableau de string a une DLL.

Pour le language "Mystere" ;-) en fait si je n'en parle pas c'est parce que a chaque fois que j'ai demandé de l'aide a des professionnels comme toi du C et VB, soit je me suis fait envoyé dans les roses du style "Moi je suis programmeur avec un vrai language de programmation et pas bidouilleur" :-(
Ou au mieux, des que j'ai dit que ma DLL etait pas faite en C et que j'adorais ce language mais n'y connaissait rien et ben plus de reponse :-(

Tu ne le sais pas, mais je suis un ouvrier qui n'aimait pas l'ecole, mais qui s'est passionné a l'age de 16 ans pour la programmation.
Je suis fou d'elle.....mais comme dans toutes les grandes histoires tragiques d'amour, elle ne m'aime pas :-(
Alors je fais avec depuis plus de 25 ans, j'essai de programmer en VB et j'ai pu trouver un super language fait par un cerveau comme toi et certain des membres de ce forum, qui permet au burnes comme moi de toucher du doigt les joies de la programmation, sans etre trop expert.

Ce qui n'empeche pas les pro de l'utiliser car il est tres bien conçu, puissant, bas niveau, et compile en ASM assez propre, portable, multiplateforme, petit, produisant des exe autonomes et tout aussi petit, et en plus il permet de creer aussi bien des EXE que des DLL avec le meme code.
Alors je vais te dire le nom en esperant que tu ne prendras pas tes jambes a ton coup comme les autres :-(
Sache bien que ceux qui l'utilisent ou l'on créé n'en respecte pas moins le C ou autre,mais voit en lui un moyen rapide et propre de creer une petite appli qui tourne tres bien sans avoir a sortir l'artillerie lourde :-)

Mon reve depuis 25 ans serait de coder C........mais la seule chose que j'ai su faire c'est ouvrir la boite ....prendre peur......et la reposer sur mon etagere en la regardant desesperement tous les jours tout en poussant un Huuummmmmffff !!!! de tristesse.
Je pense que ce petit language par la taille mais grand par ses capacité a sa place au milieu des grands, car il n'a pas la pretention de remplacer les autres ....mais de traiter rapidement des petits problemes le plus simplement du monde.
Il est desormais reconnu, car il a une rubrique dans ww.developpez.com, c'est un gage du serieux de ce dernier, je pense.

Mon probleme a moi, c'est que j'essai de faire discuter VB et PB et ils sont tres different.
Sur le forum PB, il n'y a pas beaucoup de programmeur VB.....ils sont plutot ASM et C ou alors que PB et sur le forum VB pas beaucoup de monde veut m'aider ne me prenant pas au serieux ou bien pensant que PB n'est pas "un language" :-(

Bon je me lance........c'est PureBasic..........créé par Frederic laboureur un français qui se demene avec une petite equipe pour nous fournir le maximum de qualité avec le minimum d'argent.....et a notre epoque c'est pas commun non ?????

Tu es encore la ...... :-)))))

Bon si oui, je te donne le code de la DLL , j'ai oté la gestion de fenetre car je pense qu'elle ne doit pas t'interesser et alourdis la comprehension :-)
ProcedureDLL FenetreTexte(TitreFenetre.s, *AdresseTablo, Couleur #Black, Graphique #False)

  *AdresseTablo est un pointeur memoire (En PB quand il y a une etoile devant c'est un pointeur)
.s à la fin d'une variable signifie que c'est une string comme "TitreFenetre.s"
Couleur = #Black signifie que si on entre rien la valeur defaut sera la couleur #Black

 Dim MyArray.l(1) SizeOfArray.l PeekL(*AdresseTablo) .l long
 ReDim MyArray(SizeOfArray)
 CopyMemory(*AdresseTablo, @MyArray(), SizeOfArray * 4)
 Je copie la memoire de  SizeOfArray * 4 octets en partant de *AdresseTablo  dans le tablo @MyArray(), En PB @ signifie "adresse de"

....
<Code de la fenetre>   
...

J'ecris dans la listebox avec une boucle le tablo MyArray(i)
 For i = 1 To SizeOfArray
  AddGadgetItem(#ListviewTexte, - 1, MyArray(i))
 Next





...
<Code de la fenetre>   
...
 
EndProcedure



Voila je sais que ce que je te demande n'est pas simple :-(


Et je te remercie d'avoir la grandeur d'esprit de bien vouloir aider un handicapé de l'informatique comme moi
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
eh beh, tout un post ^^

ok bon, je ne me sauve pas et n'ai aucune grief contre purebasic

reprenons :
tu envoies depuis VB un tableau de long, étant le tableau des adresses mémoire de chaque string du tableau d'origine

PB reçoit cette adresse et sait que c'est une pointeur (*)
tu copies ensuite le tableau d'adresses dans un autre tableau de long...

tout çà n'est pas à faire, surtout qu'autant les tableaux sont très spécifiques en VB, autant c'est peut-être aussi le cas en PB...

et pour ma part aucun test faisable côté dll....

une alternative serait de passer en paramètre une chaine unique, étant le tableau ??

VB :
 Dim TabloString(1 To 3) As String
 TabloString(1) = "Bonjour"
 TabloString(2) = "je suis un tableau VB"
 TabloString(3) = "et je veux sauter dans une DLL :-)"
 FenetreTexte "Coucou", Join(TabloString, vbNullChar), 0, 0

PB : ProcedureDLL FenetreTexte(TitreFenetre.s, StringJoinedArray.s, Couleur #Black, Graphique #False)

Dim SplitedArray.s()
SplitedArray = split(StringJoinedArray, chr(0))

 For i = 0 To PeekL(*SplitedArray) -1
  AddGadgetItem(#ListviewTexte, - 1, SplitedArray(i))
 Next

... dans ce goût là, qu'en penses-tu?
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Tu es pas parti ......
J'en pense que tu es un ange :-)
Et tu peut pas savoir ce que ça fait plaisir de se sentir moins seul

J'avais fait la meme chose au tout debut mais avec 10 lignes de plus :-(
En fin de compte, si j'ai bien compris tu met tout sur une meme ligne séparé par un caractere donné et hop tu la met a la poste.
La DLL n'a plus qu'a redecouper les chanps.

Quand j'avais fait ça, ça marchait, mais je me suis dit :

1/ C'est pas tres "professionnel" comme methode :-(
2/ Et secondement, je me suis dit imagine que le tableau est immense.....je crois qu'une variable peut aller jusqu'a 32 k. et apres ?????

C'est pour cette raison que j'ai essayé cette methode de passage de pointeur, pour pallier a tous les cas.qsu
Si vraiment je trouve pas de solution....je ferais celle la ...c'est mieux que rien :-)

Mais dis voir, comment explique tu que quand je compile ma DLL en UNICODE elle comprenne le tableau et quand je la compile en ANSI je n'ai que le premier caractere et encore ????
Si ce n'est pas de l'UNICODE que j'envoie, que devrais je mettre dans VB comme conversion pour que ma DLL ANSI comprenne le tableau de pointeur ????
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
tu as bien compris oui ;)

1/ je ne suis pas fan de cette méthode non plus, mais c'est mieux que 2 tableaux comme tu fais ^^
(enfin, sans doute discutable)

2/ la taille d'une string te permet tout de même de stoquer plus de 2 milliards de caractères, faut déjà les faire...
la chaine fixe est bloquée à 64Ko, mais çà ne te concerne pas






à la limite on peut tenter quelque chose, par curiosité
si la version PB démo (http://www.purebasic.com/french/download.php3) le permet, transmet-moi le code complet de ta dll, avec les explications que tu penses nécessaires (déclarations d'api, déclarations de variables avec types, etc...), et je jetterai un oeil, voir un peu ce qui est faisable

++
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Alors la ....je reste sans voix !!!!!
Et pour moi c'est super dur :-))))

Oui normalement la version demo restreint un nombre de ligne maxi, je crois mais qui est grand et on ne peut pas utiliser les API.
Quand tu pense que FRED....(c'est comme ça qu'on l'appelle) car on cause parfois avec lui, il est super cool, mais débordé, il s'est palluché presque toutes les API.
Avec VB il faut les declarer....avec PB tu les utilise comme une instruction native sauf que tu met un underscore a la fin. (C'est a ça qu'on les reconnait)

C'est la premiere fois que je vois quelqu'un ouvert d'esprit comme toi, et je tiens à te le dire.
Je sais que c'est un tres bon language, car moi j'suis une bite en prog, mais y'a aussi des sacré CAIDS du C et de l'ASM qui l'utilisent.
Donc quand on vois que eux l'utilisent......ça encourage.
Comme je te le dis (car je repete ce qu'ils disent) c'est au contraire un bon complement des autres languages, car la mise en oeuvre est hyper rapide et la puissance est au RDV ;-)

La communauté Française est super sympa, on se marre presque tous les jours ensemble, mais on est pas trop nombreux, on aurait bien besoin d'un cerveau comme toi
http://www.purebasic.fr/french/

Et ce language est connu internationalement, c'est ici que les plus fort on fait leur nid :-)))
Jete un oeil aux codes, je pense qu'avec ton ouverture d'esprit et ta connaissance, tu devrais vite te rendre compte de la puissance de la bete :-)
http://www.purebasic.fr/english/index.php

Y'a meme un forum allemand, qui sont aussi tres fort , bleme....c'est que a part sous la torture...je parle pas l'allemand :-)))
http://www.purebasic.fr/german/

Sans parler des frums non officiels russe, chinois qui se sont monté et aussi noir de liens qui donnent acces a des centaines de codes tout pret.........
Pour les forums chinois et russe on se mefie un peu.....car vu le bas niveau et l'autonomie du language il est tout désigné pour la creation de virus pour les gens mal intentionnés :-(

Voici donc tout le code, et encore merci pour tout.
J'suis fier de te connaitre :-)

http://erdsjb.free.fr/TabloDll.zip
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Dans le ZIP tu trouveras le VB evidemment ....un fichier .PB que tu as juste a faire glisser dans l'IDE de Pure et la DLL compilée
Pour Compiler la DLL tu va dans "Compilateur/option du compilateur" normalement tu doit avoir "Format de l'executable = Shared DLL" quand tu veux le meme prg en EXE tu met "Windows", tu vois si meme une gaufrette comme moi y arrive ......Tu peux aussi faire des applis console, ce que ne sait pas faire VB non plus :-(

La seule chose pour qu'une procedure soit "exportable" en DLL il faut l'appeller "ProcedureDll", sinon pour un exe tu peux les laisser comme ça, mais elles s'appellent Procedure tout court.
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
FRED a prevu aussi de creer des DLL avec appel CDESL ou un truc comme ça.....enfin l'autre appel de DLL que connait le C.
Alors la il faut les appeller "ProcedureCDLL" mais la ça me depasse deja un peu :-))

Autre chose pas banal, PB accepte que tu code directement en assembleur au milieu du code natif.
Comme ça tu peut creer des procedures encore plus rapide intégrée au code.
On peut aussi inclure tous fichier en DATA et les utiliser, comme les fichier RES de VB

Et encore des centaines de choses de dingue pour un petit language comme celui la :-)
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Y'a deja pas mal de library statique....une FTP, une video, une mail, MD5, Regular expression, XML, Preference .....et il s'en rajoute de temps en temps a chaque version qui est GRATUITE A VIE

MAis encore plus dingue, c'est que comme VB, il est extensible a volonté, tu peux creer tes propres libraries et les inclures dans l'IDE, ou les partager avec les autres....
L'IDE est entierement parametrable, tu peut tout choisir, inserer ses plugin que tu as realisé, apeller des programmes qui s'inserent a n'importe quel moment de la compilation ......

Il n'existe pas qu'un seul IDE, des passionnés ont créé JAPBE (Just Another Pure Basic Editor) qui est encore plus performant.
Il existe des programmes aussi gratuit qui compile les librairies en ASM (Taillebite) aussi créé par les CAIDS du forum.

Y'a encore noir de trucs que j'espere tu auras le temps de decouvrir, et aussi la patience car j'en apprend tous les jours depuis 4 ans...

Car PB c'est avant tout une grande famille, tout le monde se connait et partage sa passion de la prog.....
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
---------------------------
Information
---------------------------
DLL creation is not available in the demo version.
---------------------------
OK  
---------------------------

bien dommage...

en plus il doit manquer d'autres fichiers, la constante #black n'est pas reconnue

cul de sac
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Zut, j'savais pas pour les DLL :-(
Faut dire que j'ai jamais utilisé la demo
Au pire je peux te la compiler et te la faire passer si tu as une geniale idée

Pour la constante #Black, c'est pas grave.....tu met 0 à la place., C'est pour la couleur de la fenetre

Ou bien tu la rajoute dans

Enumeration 
 #Black = 0
EndEnumeration

Au fait, j'avais oublié le lien Developez.com
http://purebasic.developpez.com/
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
f11 pour l'explorateur des constantes etc..., avec JAPBE (nos messages se sont croisés)

mais il bloque sur l'API
une idée?

---------------------------
jaPBe - Compiler error
---------------------------

File : C:\xxxxx\TabloDll\MyDll.pb
Line : 43

GetAsyncKeyState_() is not a function (or not available in demo version), macro, array or linked list.
---------------------------
OK  
---------------------------

NB : c'est la version 3.9.6.795, ouverture fichier en PB4.31, version NON-démo