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
» Logiciel de planétarium.
Problème en adressage de strings par ADR() ? Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Problème en adressage de strings par ADR() ? Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Problème en adressage de strings par ADR() ? Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Problème en adressage de strings par ADR() ? Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Problème en adressage de strings par ADR() ? Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Problème en adressage de strings par ADR() ? Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Problème en adressage de strings par ADR() ? Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Problème en adressage de strings par ADR() ? Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Problème en adressage de strings par ADR() ? Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Problème en adressage de strings par ADR() ? Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Problème en adressage de strings par ADR() ? Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Problème en adressage de strings par ADR() ? Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Problème en adressage de strings par ADR() ? Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Problème en adressage de strings par ADR() ? Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Problème en adressage de strings par ADR() ? Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -28%
-28% Machine à café avec broyeur ...
Voir le deal
229.99 €

 

 Problème en adressage de strings par ADR() ?

Aller en bas 
2 participants
AuteurMessage
Klaus

Klaus


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

Problème en adressage de strings par ADR() ? Empty
MessageSujet: Problème en adressage de strings par ADR() ?   Problème en adressage de strings par ADR() ? EmptySam 19 Fév 2011 - 22:56

Pendant mes tests pour un problème avec mon WebBrowser, signalé par Ygeronimi, je suis tombé sur un comportement curieux. Je passe un string en paramètre de la manière suivante:

En Panoramic:
Code:

dim x$, ax%, i%

x$ = "ma chaîne de caractères"
ax% = adr(x$)

i% = dll_call1("MaFonction",ax%)

En Delphi, dans ma DLL, je reçois le string de la manière suivante:
Code:
function MaFonctionl(Chaine: pstring): integer; stdcall; export;
var
        MaChaine: WideString;
begin
        MaChaine := Chaine^;
showmessage(MaChaine);

Avec la version V09.21i1, je récupère bien ma chaîne, et elle est affichée par showmessage.
Avec la version V09.31i3, je récupère une chaîne vide.

Qu'est-ce qui a changé % La fonction adr() retourne une valeur non-nulle, mais visiblement, ce n'est plus un pointeur sur la partie data de la chaîne; ça pointe peut-être sur un zéro.

Je précise que j'utilise le même source Panoramic pour tester dans les deux versions, et la même dll avec ma fonction Delphi. La seule différence, c'est l'éditeur.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

Problème en adressage de strings par ADR() ? Empty
MessageSujet: Re: Problème en adressage de strings par ADR() ?   Problème en adressage de strings par ADR() ? EmptyMar 22 Fév 2011 - 9:28

Bonjour Klaus,

Je viens juste d'installer la dernière version 0.9.21i3 et je n'ai pas ce problème avec mes DLL en FreeBASIC.

Je n'ai pas encore testé avec Delphi.

En FreeBASIC je passe le pointeur par référence (byref p as zstring ptr), comme l'avait conseillé D. J. Peters. Peut-être faut-il faire de même en Delphi (var p : pstring) ?

En revanche, je n'ai toujours pas trouvé comment retourner à Panoramic une chaîne de caractères qui a été modifiée dans la DLL.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

Klaus


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

Problème en adressage de strings par ADR() ? Empty
MessageSujet: Re: Problème en adressage de strings par ADR() ?   Problème en adressage de strings par ADR() ? EmptyMar 22 Fév 2011 - 15:16

Pour retourner un string à Panoramic, il y a plusieurs solutions.

Première possibilité:
Code:
function FileCreate(root, filter, fichier, filsiz: integer):integer; stdcall; export;
var
    fic: string;
    exist: boolean;
    pstr: pstring;
    KGFSaveDialog: TSaveDialog;
    sfic: integer;
    sfichier: integer;

begin
    KGFSaveDialog := TSaveDialog.Create(nil);
    pstr := pstring(root);
    KGFSaveDialog.InitialDir := pstr^;
    pstr := pstring(filter);
    KGFSaveDialog.Filter := pstr^;
    exist := KGFSaveDialog.Execute;
    fic := '_';
    result := 0;
    if exist then
        begin
            fic := KGFSaveDialog.FileName;
            sfic := sizeof(fic);
            sfichier := filsiz;
            if sfic<sfichier then sfichier := sfic;
            pstr := pstring(fichier);
            move(fic,pstr^,sfichier);
            if fileexists(fic) then
                result := 2
            else
                result := 1;
        end;
    KGFSaveDialog.Free;
end;

2ème possibilité:
Code:
// sélection un répertoire avec création
function FolderSelectWithCreate(root, folder, sfolder: integer): integer; stdcall;
var
    dir: string;
    sfic, sfold: integer;
    pstr: pstring;
    i: integer;
    PB: pByte;
    char: pchar;
begin
    pstr := pstring(root);
    dir := pstr^;
    if SelectDirectory(dir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then begin
        sfic := length(dir);
        sfold := sfolder;
        PB := pbyte(pstring(folder)^);
        if sfic<sfold then sfold := sfic;
        for i:=1 to sfold do begin
            char := pchar(midstr(dir,i,1));
            PB^ := Byte(char^);
            inc(PB);
        end;
        result := 1;
    end else begin
        result := 0;
    end;
end;

3ème possibilité:
Code:
// send a text message to Panoramic Edit field by field handle
function IPCSendMessage(const mes: pchar; const lon: integer; const hnd: integer): integer; stdcall; export;
var
        i: integer;
        pstr: PString;
        str1: pchar;
begin
        pstr := PString(mes);
        str1 := pchar(pstr^);
        i := SendMessage(hnd, WM_SETTEXT, lon, LParam(str1)); //on récupere le texte
        result := i;
end;

La dernière possibilité permet d'intercepter, en Panoramic, l'arrivée du texte par un évènement on_change. J'ai aussi le code pour trouver le handle d'un objet EDIT si cela t'intéresse.

Ces 3 exemples sont extraits de ma dll KGF.dll, et ce sont donc des routines qui marchent. Je suis sûr qu'il y a d'autres moyens de retourner un string, mais ce sont ceux que j'ai trouvés.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Problème en adressage de strings par ADR() ? Empty
MessageSujet: Re: Problème en adressage de strings par ADR() ?   Problème en adressage de strings par ADR() ? Empty

Revenir en haut Aller en bas
 
Problème en adressage de strings par ADR() ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Problème avec guillements dans des strings
» Adressage des pixels d'un picture
»  1.84 18/11/2012 ajout fonctions de strings
» Comparaison de strings en ASCII strict
» Problème avec select case Probleme réglé merci

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Un problème avec PANORAMIC?-
Sauter vers: