FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Fonction ADR pour adresse d'un string Emptypar Klaus Aujourd'hui à 9:53

» Je teste PANORAMIC V 1 beta 1
Fonction ADR pour adresse d'un string Emptypar Klaus Aujourd'hui à 9:52

» bouton dans autre form que 0
Fonction ADR pour adresse d'un string Emptypar leclode Hier à 13:59

» KGF_dll - nouvelles versions
Fonction ADR pour adresse d'un string Emptypar Klaus Hier à 11:41

» Gestion d'un système client-serveur.
Fonction ADR pour adresse d'un string Emptypar Klaus Hier à 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Fonction ADR pour adresse d'un string Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Fonction ADR pour adresse d'un string Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Fonction ADR pour adresse d'un string Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Fonction ADR pour adresse d'un string Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Fonction ADR pour adresse d'un string Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Fonction ADR pour adresse d'un string Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Fonction ADR pour adresse d'un string Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Fonction ADR pour adresse d'un string Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Fonction ADR pour adresse d'un string Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Fonction ADR pour adresse d'un string Emptypar jjn4 Lun 22 Avr 2024 - 13:43

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-28%
Le deal à ne pas rater :
Brandt LVE127J – Lave-vaisselle encastrable 12 couverts – L60cm
279.99 € 390.99 €
Voir le deal

 

 Fonction ADR pour adresse d'un string

Aller en bas 
4 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptySam 17 Avr 2010 - 18:38

La foncton adr(n%) marche très bien, mais j'aurais une grande utilité d'appliquer cette fonction à un string, pour pouvoir passer un string en paramètre à une DLL ou récupérer un résultat string d'une DLL. J'aimerais pouvoir faire ceci:
Citation :

dim nom$,lnom%,resultat$,lresultat%,n%
nom$ = "test.dat"
lnom% = len(nom$)
resultat$ = string$(1000," ")
lresultat% = len(resultat$)
n% = DLL_call4("ma_fonction_dll",adr(nom$),lnom%,adr(resultat$),lresultat%)
print resultat$

Jack, est-ce que c'est un gros travail ou il s'agit juste d'un oubli dans l'implémentation ? Ou serait-ce plus simple de créer une nouvelle fonction descr(v) qui retournerait un entier 32 bits contenant l'adresse d'un block mémoire de 3 entiers 32 bits contenant le type de la variable v, l'adresse de la partie data de la variable v et la longueur en octets de cette partie data, quelque soit le type de la variable ?

Dans ce cas, mon petit exemple se réduirait à ceci:
Citation :
dim nom$,resultat$,n%
nom$ = "test.dat"
resultat$ = string$(1000," ")
n% = DLL_call2("ma_fonction_dll",descr(nom$),descr(resultat$))
print resultat$

Je sais, le problème de la fonction adr() a été évoqué il y a longtemps, mais j'aimerais vraiment pouvoir passer des strings à une DLL et les en sortir !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyDim 18 Avr 2010 - 15:03

Normalement il est bien prévu dans la doc que la fonction ADR() retourne l'adresse de TOUS les types de variables, y compris chaîne (sauf les éléments de tableaux), ça n'a pas été réparé ? si non, c'est un bug en attente.
Code:
DIM a$, b%
a$ = "Au clair de la lune"
b% = 12
PRINT ADR(a$)
PRINT ADR(b%)
END
Effectivement, ça ne marche pas pour la variable chaîne ! il y a affichage d'une adresse dans un message...
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyDim 18 Avr 2010 - 19:43

Eh oui, c'est ce que j'ai vu. Je l'avais déjà signalé il y a un certain temps, et Jack avait dit qu'il s'en occuperait à l'occasion. Pour le moment, il n'a apparemment pas eu le temps, ce que je comprends. Ceci dit, je reste bloqué dans ma réalisation: mes fonctions marchent bien hors Panoramic, mais le lien n'est pas possible à cause du défaut de adr(a$)... Alors, j'attends encore.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyDim 18 Avr 2010 - 20:41

Ça à dû passer à l'as dans la todo list... il est vrai qu'elle est immense...
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyJeu 22 Avr 2010 - 11:11

Dès que la fonction adr(a$) marchera, je pourrai mettre à disposition de tous ma nouvelle routine d'envoi de messages texte d'un programme Panoramic à un autre. Ca fonctionnne et je peux le mettre dans ma DLL, mais il faut que je puisse capter le texte à envoyer, ainsi que le nom du destinataire (qui est caption(0) du programme de destination). Il y a aussi une fonction de réponse au message reçu.

J'ai même résolu le problème de génération d'un évènement sur réception du message: un sous-programme Panoramic se déclenchera sur réception de chaque message !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyJeu 22 Avr 2010 - 11:27

J'ai comme l'impression que tu demandes que ADR(A$) fonctionne ...
OK, je regarde ce bug.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyJeu 22 Avr 2010 - 13:34

Un grand merci pour l'attention que tu portes à mes suggestions !

Lorsque cette fonction marchera, je pourrai avoir accès aux strings en entrée et sortie d'une DLL, en passant en paramètres quelque chose comme ceci:
Citation :

dim etat%, dest$, mes$

dest$ = "MonProgrammeDeDestination"
mes$ = "MonMessageTexte"
etat% = DLL_call4("SendToPanoramic",adr(dest$),len(dest$),adr(mes$),len(mes$))

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptySam 24 Avr 2010 - 9:24

Le bug est corrigé dans la version instantanée du 24/04/2010.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptySam 24 Avr 2010 - 10:43

Excellent ! Je m'y mets de suite ! Merci !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 26 Avr 2010 - 0:21

@Jack:

J'ai passé un peu de temps à comprendre commend fonctionne adr(a$) !

En effet, contrairement à adr(i%) qui donne directement l'adresse de la partie data, adr(a$) donne l'adresse d'une sorte de descripteur qui contient une adresse aui pointe vers le texte proprement dit du string.

Une fois que j'avais compris cela, la suite s'enchaînait logiquement.

Comme premier résultat, j'ai mis une nouvelle fonction dans ma DLL permettant de changer l'imprimante par défaut de windows; la gestion de messages entre processus Panoramic suivra sous peu.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 11:32

Citation :
En effet, contrairement à adr(i%) qui donne directement l'adresse de la partie data, adr(a$) donne l'adresse d'une sorte de descripteur qui contient une adresse aui pointe vers le texte proprement dit du string.
?????
Je ne comprends pas.
ADR(a$) donne l'adresse du 1er caractère (existant ou pas si a$="") de a$.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 12:32

La raison est la suivante:

Pour prendre un string passé en paramètre avec adr(s$), je fais ceci en Delphi:
Code:

function PrinterFunction(const f:integer; phnd: Pinteger; chnd: Pinteger; opt1: integer; opt2: integer; opt3: integer): integer; stdcall; export;

var
        pstr: PString;


                pstr := PString(opt1);
                printer.Canvas.Font.Name := pstr^;

Et il me semble donc qu'il y a une indirection de plus, c'est-à-dire l'adresse reçue en paramètre est l'adresse où se trouve l'adresse de a$. Mais n'ayant pas une grande expérience en Delphi, je peux me tromper.

De toutes façon, avec cette construction, ça marche et je peux aussi retourner les strings en utilisant cette construction. Alors, mon message c'était juste pour comprendre.

Cependant, est-ce que tu as eu le temps de regarder s'il est possible d'étendre la fonction adr() pour passer l'adresse du début de la partie data d'un tableau d'entiers, de la même manière que celle du début d'un string ? Avec une syntaxe du type
Code:

dim x%(10),res%

res% = dll_call1("MaRoutine",adr(x%())

ou une autre fonction du type adr_array(x%) ?

Je sais qu'il y a un risque de corruption des données, mais ce risque existe de toutes façon dès qu'on passe une adresse à une DLL...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 14:26

Il me semble qu'en Basic également dans le cas d'une variable chaîne c'était de l'adressage indirect, que ADR(a$) donnait l'adresse d'un pointeur vers la chaîne et la longueur de celle-ci.
Ici je ne sais pas, Jack a l'air de dire que c'est direct, et je me demandais justement s'il est possible d'exploiter cette adresse autrement qu'en paramètre de dll, c'est à dire aller voir en mémoire ce qu'il y a à l'adresse rendue par adr(), en somme l'équivalent de PEEK(adresse) en basic.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 14:36

Pour simuler un peek, cela ne me semble pas possible en Panoramic directement. Mais avec une fonction DLL, c'est très simple, et je l"ai fait pour mettre ma DLL au point. Si cela t'intéresse, je rajoute des peek et poke à ma DLL - tiens-moi au courant.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
jjn4

jjn4


Nombre de messages : 2693
Date d'inscription : 13/09/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: +++   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 14:36

Oui, je me souviens de peek( ), c'était génial,
j'en ai fait des choses avec ça !
Dommage que ça n'existe pas en panoramic.
jocolor
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Klaus

Klaus


Nombre de messages : 12291
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 14:51

Il faut apporter une précision au sujet de peek et poke. Dans les anciens Basic, on adressait la mémoire physique directement. Ce n'est plus possible avec les Windows modernes. On travaille en adressage virtuel avec des adresses de 32 bits, voire 64 bits pour certaines versions, ce qui donne un espace d'adressage gigantesque qui n'a plus rien de commun avec la mémoire physique, fusse-t-elle grande.

Le système gère les allocations de morceaux de mémoire de façon interne, et ni Delphi ni Panoramic ne peuvent savoir où se trouvent physiquement les morceaux de mémoire. L'adresse 0 peut très bien être en memoire physique mais certainement pas à l'adresse 0 physique, ou alors se trouver dans le fichier de pagination...

Donc, un peek ne peut être imaginé que sur une adresse que nous fornit Panoramic, à l'aide de la fonction adr(). Et là, on connaît forcément le contenu puisqu'il s'agit de nos variables...

L'utilité de peek et poke n'est donc pas très grande en-dehors de mes petites fonctions de mise au point de ma DLL - c'est la raison pour laquelle je ne les avais pas incluses dans la version publiée.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string EmptyLun 24 Mai 2010 - 15:29

Effectivement,je sais bien que l'adressage en QBasic était physique (0 à 65535) donc très simple. Avec les mémoires gigantesques actuelles, la pagination, la gestion dynamique, etc. c'est beaucoup plus compliqué, et comme tu dis je me demande finalement si ce serait bien utile.

Mon arrière-pensée de départ était une espèce de programme de debug, noter l'adresse de certaines variables au départ pour pouvoir lire et tracer leur valeur à des points de passage choisis.
Mais bon, c'était un peu une idée en l'air, et on doit pouvoir faire ça avec les outils disponibles (Message notamment).
En ce qui me concerne Klaus, je te remercie mais tu peux laisser tomber, tant que je n'aurai pas les idées plus claires !
Revenir en haut Aller en bas
Contenu sponsorisé





Fonction ADR pour adresse d'un string Empty
MessageSujet: Re: Fonction ADR pour adresse d'un string   Fonction ADR pour adresse d'un string Empty

Revenir en haut Aller en bas
 
Fonction ADR pour adresse d'un string
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» string$(0,chr$(32)) sans erreur
» Lever les restrictions sur la fonction String$
» Je n'arrive pas à faire passer mon string par ma DLL
» Demande de nouvelle fonction sur les chaînes de caractères.
» Création d'une variable string à partir d'une DLL

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos souhaits d'amélioration de Panoramic-
Sauter vers: