IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

[Linux] Convertir un projet Delphi7 en Lazarus et des Single en Float (ou l'inverse) [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut [Linux] Convertir un projet Delphi7 en Lazarus et des Single en Float (ou l'inverse)
    Bonjour,

    Dans un projet D7 je trouve, dans Unit1,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      Form1: TForm1;
      FFT : array[1..1024] of float; // Initial array that FFT Data will go into
      Scaled_FFT : array[0..15] of float; // The sorted and scaled data
      Bin_Dist : array[0..16] of integer; // My way of sorting data
    et plus loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for x := 0 to 15 do
    begin
      tot_sum := 0; 
      for y := Bin_Dist[x] to Bin_Dist[x+1] do tot_sum := tot_sum + (FFT[y]);
      Scaled_FFT[x] := tot_sum * 50; // Just get the numbers a little larger to work with
    end;
    donc ici on est en Float.

    Dans une unité complémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Procedure TSpectrum.Draw_Spec(HWND : THandle; FFTData : array of single);
    var
      i : Integer;
    begin
      Img_Hand := HWND;
      for i := 0 to No_Peaks - 1 do Spec_Data[i] := FFTData[i];
      Draw_It;
    end;
    Ici on est en Single et D7 ne dit rien à la compilation, et l'exécution est parfaite.

    Lazarus, lui, n'est pas content du tout lors de l'appel de cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      GetData; // My proc to get and sort the data
      My_Spectrum.Draw_Spec(paintbox1.Canvas.Handle, Scaled_FFT);
    end;
    Avec le curseur au bout de Scaled_FFT je gagne
    Error: Incompatible type for arg no. 2: Got "Array[0..15] Of Extended", expected "Open Array Of Single"
    Si je remplace array of single par array of float dans les déclarations, ça compile, mais les données sont tellement en vrac que c'est inutilisable
    Et pareil si j'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //  Scaled_FFT : array[0..15] of float;  // The sorted and scaled data
        Scaled_FFT : array[0..15] of single; // The sorted and scaled data
    J'ai remis en place {$MODE Delphi} mais ça ne change pas la donne.

    Comment faire ?
    Merci,

    Ah, pour les curieux, tout ça se trouve dans le projet audio BigJim_Spectrum (Dieu sait où je l'ai trouvé, et il y a looooooongtemps…)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Bonjour Jean-Pierre,

    Il n'y a pas que la taille du réel en cause, apparemment, mais aussi la compatibilité tableau dynamique/tableau aux dimensions fixes.

    Il faudrait regarder ce que donne la déclaration d'un type pour l'utiliser dans la déclaration des paramètres de la procédure TSpectrum.Draw_Spec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      TSeizeReels = array[0..15] of Float;
     
    Procedure TSpectrum.Draw_Spec(HWND : THandle; FFTData : TSeizeReels);
    Puis jouer sur les types Single et Float selon besoin !
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... [CODE]Procedure TSpectrum.Draw_Spec(HWND : THandle; FFTData : array of single); ...
    Et si ici tu changeais array of single par array[0...15] of Single ; Single ou Float, mais pas un array ouvert.

    Cordialement.

    Pierre.

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut JP,

    sous D7 si je me souviens bien float est un Alias qui prend la type Double ou extended suivant un cas particulier.

    Vu que tu bosses avec un transformée de Fourrier je remplacerai plus par des double mais bon si ta fonction attend des single ben des single

    Mais ton problème ici c'est dans Procedure TSpectrum.Draw_Spec(HWND : THandle; FFTData : array of single); c'est un tableau dynamique et que Scaled_FFT : array[0..15] of single; est un tableau statique (ouep je sais ce truc est rageant avec Lazarus/FPC) je me suis déja pris la tête avec ça.

    La solution la plus simple à tester serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Var
      Scaled_FFT : Array of Single;
     
    procedure form1.FormCreate(sender : TObject);
    begin
      SetLength(Scale_FFT,16);
    end;
     
    procedure form1.FormDestroy(sender : TObject);
    begin
      SetLength(Scale_FFT,0);
      Scale_FFT := nil; // sinon reste des traces en mémoire
    end;
    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Bonsoir les copains, et merci de vos retours.

    Alors dans l'ordre de publication :
    1) Yves : pas mal l'idée, mais j'ai toujours des résultats inexploitables, même en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      TSeizeReels = array[0..15] of Single;// Float;
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    0
    0
    -10
    3.54513656630137E-314
    10
    10
    -10
    10
    10
    10
    8.80963813057486E-415
    -10
    10
    10
    10
    2.30640489446536E-443
    -10
    10
    quand sous XP le même morceau de musique renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    0,000347559194779024
    0,000140536911203526
    0,00016242140554823
    3,12866905005649E-5
    4,30970430898014E-5
    9,53378475969657E-5
    9,10803937586024E-5
    0,000145086829434149
    1,84196560439887E-5
    0,000173073989572003
    9,32306720642373E-5
    0,000362227408913895
    0,000417395436670631
    0,000124832891742699
    0,000252640515100211
    2) Pierre : alors ça, je ne l'avais encore jamais vécu, dis donc !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure Draw_Spec(HWND: THandle; FFTData: array[0..15] of single);// Fatal: Syntax error, "OF" expected but "[" found
    J'ai cherché cette erreur sur le web sans rien trouver en première page.

    3) Jérome : comme Yves.

    Si je mets le log plus loin (équivalent à ce qui sera passé à la proc d'affichage), sous Linux/Lazarus j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0
    Nan
    Nan
    Nan
    Nan
    Nan
    Nan
    0
    0
    et sous XP/D7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    0
    2,454176902771
    1,75335144996643
    1,96362197399139
    3,54259562492371
    2,43138337135315
    3,16845107078552
    1,90426671504974
    2,55518412590027
    3,27383947372437
    8,01728248596191
    5,7591700553894
    Je suis désespéré…

    Bon, ok, sous XP/D7 c'est une vieille version de Bass alors que sous Linux c'est la toute dernière.
    Donc il va me falloir tester le code D7 avec la dernière dll, des fois qu'il y aurait une blague de ce côté-là.
    À suivre, je vous tiens au courant.

    EDIT : ça aura été vite, et c'est hallucinant : ça… fonctionne !
    J'ai un peu bataillé avec D7 et la dernière version (2.4.15), il m'a fallu passer les float (que D7 ne connaissait plus ) en single, et c'est devenu ok sous 2000 et XP.

    Alors j'ai tout passé en single (plus la manip d'Yves) dans Lazarus et… c'est tombé en marche,
    Nom : program.png
Affichages : 129
Taille : 4,1 Ko

    Merci à tous.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Dis moi il vient d'ou, c'est quel exemple de Bass que je regarde de mon coté.
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Dis-moi il vient d'où, c'est quel exemple de Bass que je regarde de mon côté.
    J'ai cherché avant de poster mais je ne l'ai pas retrouvé.
    Le truc s'appelle BigJim Spectrum
    Je te propose le zip d'origine : IS.zip
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... 2) Pierre : alors ça, je ne l'avais encore jamais vécu, dis donc !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Procedure Draw_Spec(HWND: THandle; FFTData: array[0..15] of single);// Fatal: Syntax error, "OF" expected but "[" found
    ...
    J'ai dit cela, mais un peu à la va vite, en fait, cela fonctionne, mais avec ce contour du problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type
     
      TFFTData = array[0..15] of single;
    ...
     
    Procedure Draw_Spec(HWND: THandle; FFTData: TFFTData);
    Mais bon, si tu as résolu ton problème, c'est bien.

    Cordialement.

    Pierre.

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 044
    Points
    15 044
    Par défaut
    Bonjour,

    si d'aucuns veulent jouer, dans le zip le .lpr et le .dpr, la dll et les fichiers qui vont bien avec les $IFDEF.

    Je vous laisse voir les commentaires, pour moi ça fonctionne dans les deux environnements mais ça aurait besoin d'encore un peu de travail.

    Enjoy, bigjim_by_jpt.zip
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Mais ton problème ici c'est dans ... c'est un tableau dynamique
    array of est un tableau dynamique lors de la déclaration d'une variable mais un tableau ouvert s'il définit un argument.
    En d'autres termes, c'est un tableau dont on ne connait pas le nombre d'éléments et dont le premier a toujours l'indice 0 quelque soit la déclaration du tableau passé en paramètre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] [Windows - Linux] Porter le projet Delphi StretchXBR vers Lazarus
    Par Jipété dans le forum Lazarus
    Réponses: 37
    Dernier message: 31/03/2019, 10h37
  2. [Lazarus] Convertir un projet CodeTyphon en projet Lazarus
    Par Roland Chastain dans le forum Lazarus
    Réponses: 1
    Dernier message: 30/06/2015, 16h25
  3. [Visual C] Convertir un projet en pdf pur impression
    Par Platypus dans le forum Visual C++
    Réponses: 2
    Dernier message: 23/11/2006, 12h49
  4. Comment convertir un projet winform en webform ?
    Par shako95 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 30/10/2006, 11h02
  5. Réponses: 3
    Dernier message: 28/04/2006, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo