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

Langage Delphi Discussion :

Portage Delphi vers Turbo Delphi


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut Portage Delphi vers Turbo Delphi
    Bonjour,

    J'essaie de compiler différents programme en turbo delphi, ces programmes ont été crées en delphi 3. Mais peu importe le programme que je fais compiler, j'obtiens toujours ces 3 erreurs.


    [Pascal Error] ExecWait.pas(9): E2086 Type 'RIEN' is not yet completely defined
    [Pascal Error] ExecWait.pas(36): E2033 Types of actual and formal var parameters must be identical
    [Pascal Fatal Error] PImpMuni.pas(7): F2063 Could not compile used unit 'ExecWait.pas'


    Pourtant quand je les compiles en delphi 3, ils fonctionnent très bien!!

    Est-ce quelqu'un pourrait m'aider svp ??

    Merci Beaucoup

    Pierre-Luc

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pi_hellz
    Pourtant quand je les compiles en delphi 3, ils fonctionnent très bien!!
    Il y a eu qq changements depuis
    Sur l'erreur E2086, tu dois avoir une déclaration forward ou une référence d'unité manquante.

    Sur l'erreur E2033 les paramètre passés ne sont pas du même type, je crois.
    Indique nous le code ce sera mieux je pense.

  3. #3
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Laurent Dardenne
    Il y a eu qq changements depuis
    Sur l'erreur E2086, tu dois avoir une déclaration forward ou une référence d'unité manquante.

    Sur l'erreur E2033 les paramètre passés ne sont pas du même type, je crois.
    Indique nous le code ce sera mieux je pense.

    Merci de ta réponse,

    Je ne sais pas si c'est ce bout de code-là que tu veux, mais je te donne ceux qui correspondent à mes erreurs.

    Erreur : E2086
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    type
    RIEN = ^RIEN;
     function WinExecAndWait32(FileName:String; Visibility:Integer): Integer; Export;
     function WinExecNoWait32(FileName:String; Visibility:Integer): Integer; Export;
    Erreur : E2033
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    begin
     WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
     GetExitCodeProcess(ProcessInfo.hProcess,Result);
     CloseHandle(ProcessInfo.hProcess);
     CloseHandle(ProcessInfo.hThread);
    end;
    Pierre-Luc

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Le type RIEN n'est pas définie, si tu veux typer un pointeur il faut lui donner un type existant sinon utilise directement le type pointer. De plus tu as une déclaration circulaire en utilisant le même nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MonType=Integer;
    PRien=^Montype;
    //Ou 
    PRien=Pointer;
    Depuis D3 de nombreuse API système ont été intégré dans la VCL. Vérifie si c'est le cas pour WinExecAndWait32.

    Pour l'erreur : E2033 on est pas plus avancé, il nous faut la ligne en erreur, la signature de la procédure en cause et les déclarations des varaibles passées en paramètre.

  5. #5
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Est-ce que tu pourrais m'indiquer à kel endroit je pourrais vérifier si WinExexAndWait32 a été intégré dans VCL et par le fait même, si tu connais des Posts qui traitent des différents packages???

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Si tu disposes d'une version avec les codes sources,
    Faire Menu "Chercher"->"Chercher dans les fichiers" sélectionner le répertoire "C:\Program Files\Borland\BDS\4.0\source\Win32" (à adapter selon ton installation)
    Puis cocher "inclure les sous-répertoires".
    Mais c'était juste pour info et éviter les redondance de code. Par rapport à tes pb ce n'est pas prioritaire, enfin vu de mon écran .

    Concernant ta question sur les packages je pense pas qu'il en existe, utilise la fonction rechercher sur ce forum.

    Concernant l'erreur sur le type RIEN, c'est bon ou pas ?

  7. #7
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Pour la variable rien, le changement que tu m'as faite effectué marche très bien

    Au niveau de la recherche de WinExexAndWait32 , je n'ai rien trouvé!!

    J'avais déjà effectué une recherche sur le forum pour les packages, mais j'avais seulement trouvé de petite affaires ici et là rien de très complet

    D'après des recherches que j'ai faite, est-ce que ça se peut qui faut que j'ajoute un longword à quelque pars .

    Merci

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pi_hellz
    Au niveau de la recherche de WinExexAndWait32 , je n'ai rien trouvé!!
    Normal je me suis mélangé les crayons avec external Donc laisse tomber ce point.
    Citation Envoyé par pi_hellz
    D'après des recherches que j'ai faite, est-ce que ça se peut qui faut que j'ajoute un longword à quelque pars .
    Je ne sais pas. Il nous manque le n° de la ligne qui provoque l'erreur dans ce code et les déclarations des varaible utilisées dans l'appel de cette procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //? quelle est la déclaration de cette procédure
    begin 
     WaitForSingleObject(ProcessInfo.hProcess,INFINITE); 
     GetExitCodeProcess(ProcessInfo.hProcess,Result); 
     CloseHandle(ProcessInfo.hProcess); 
     CloseHandle(ProcessInfo.hThread);
    end;
    Extrait de l'aide de BDS 2006
    Les types des paramètres var originaux et formels doivent être identiques (E2033) Pour un paramètre variable, l'argument réel doit être du type exact du paramètre formel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program Produce;
     
    procedure SwapBytes(var B1, B2: Byte);
    var
      Temp: Byte;
    begin
      Temp := B1; B1 := B2; B2 := Temp;
    end;
     
    var
      C1, C2: 0..255;     (*Semblable à byte, mais NON identique*)
    begin
      SwapBytes(C1,C2);   (*<-- Message d'erreur ici*)
    end.
    Les arguments C1 et C2 ne sont pas acceptables pour SwapBytes, bien qu'ils aient la représentation mémoire exacte et l'intervalle qu'a Byte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program Solve;
     
    procedure SwapBytes(var B1, B2: Byte);
    var
      Temp: Byte;
    begin
      Temp := B1; B1 := B2; B2 := Temp;
    end;
     
    var
      C1, C2: Byte;
    begin
      SwapBytes(C1,C2);   (*<-- Aucun message d'erreur ici*)
    end.
    Vous avez ainsi à déclarer C1 et C2 comme Bytes pour que cet exemple se compile.

  9. #9
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Oui j'avais compris ce principe-là, mais je crois que mon erreur découle de ma variable ProcessInfo ( Je ne suis pas sur )

    unit Execwait;

    interface

    uses
    SysUtils, Windows;

    type
    PRIEN = Pointer;
    function WinExecAndWait32(FileName:String; Visibility:Integer): Integer; Export;
    function WinExecNoWait32(FileName:String; Visibility:Integer): Integer; Export;

    implementation

    function WinExecAndWait32(FileName:String; Visibility:Integer): Integer;
    var
    zAppName : Array[0..512] of char;
    zCurDir : Array[0..255] of char;
    WorkDir : String;
    StartupInfo : TStartupInfo;
    ProcessInfo : TProcessInformation;

    begin
    StrPCopy(zAppName,FileName);
    GetDir(0,WorkDir);
    StrPCopy(zCurDir,WorkDir);
    FillChar(StartupInfo,Sizeof(StartupInfo),#0);
    StartupInfo.cb := Sizeof(StartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := Visibility;
    if not CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE,nil,nil,StartupInfo,ProcessInfo) then
    Result := -1
    else
    begin
    WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
    Ligne 36 GetExitCodeProcess(ProcessInfo.hProcess,Result);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
    end;
    end;

    function WinExecNoWait32(FileName:String; Visibility:Integer): Integer;
    var
    zAppName : Array[0..512] of char;
    zCurDir : Array[0..255] of char;
    WorkDir : String;
    StartupInfo : TStartupInfo;
    ProcessInfo : TProcessInformation;

    begin
    StrPCopy(zAppName,FileName);
    GetDir(0,WorkDir);
    StrPCopy(zCurDir,WorkDir);
    FillChar(StartupInfo,Sizeof(StartupInfo),#0);
    StartupInfo.cb := Sizeof(StartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := Visibility;
    if not CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE,nil,nil,StartupInfo,ProcessInfo) then
    Result := -1
    else
    Result := 0;
    end;

    end.
    Mon erreur est à la ligne 36 soit elle qui est en rouge !!

  10. #10
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Sous Delphi 2006
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Unit Windos;
    ...
    function GetExitCodeProcess(hProcess: THandle; var lpExitCode: DWORD): BOOL; stdcall;
    Ta fonction WinExecAndWait32 renvoi un integer au lieu d'un DWord, donc à priori Result pose pb dans l'appel en ligne 36

  11. #11
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Merci Beaucoup, mais dois-je créer une nouvelle fonction

    Unit Windows; Est-ce que tu voulais dire Unit Execwait
    ...
    function GetExitCodeProcess(hProcess: THandle; var lpExitCode: DWORD): BOOL; stdcall;
    Pour ce qui est du Dword = longword, je le place ou exactement, j'ai essayé de le placer, mais je me retrouve avec 4 erreurs au lieu de 2 . .

  12. #12
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pi_hellz
    mais dois-je créer une nouvelle fonction
    Non juste modifier celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function WinExecAndWait32(FileName:String; Visibility:Integer): DWORD;
    Citation Envoyé par pi_hellz
    mais je me retrouve avec 4 erreurs au lieu de 2.
    C'est l'effet domino
    Essaie avec cette modification. Pour les autres erreurs il faut vérifier si elles sont liées à ce pb ou pas.
    Lance une construction de ton projet tu seras fixé sur leurs nombre.

  13. #13
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Bon ça marche pour ma fonction, mais maintenant j'obtiens cet erreur quand je compile


    [Pascal Error] ExecWait.pas(33): E1012 Constant expression violates subrange bounds
    [Pascal Fatal Error] PImpMuni.pas(7): F2063 Could not compile used unit 'ExecWait.pas'
    Cette erreur référe à mon ELSE

    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
    begin
      StrPCopy(zAppName,FileName);
      GetDir(0,WorkDir);
      StrPCopy(zCurDir,WorkDir);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE,nil,nil,StartupInfo,ProcessInfo) then
        Result := -1
          else
        Begin
          WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
          GetExitCodeProcess(ProcessInfo.hProcess,Result);
          CloseHandle(ProcessInfo.hProcess);
          CloseHandle(ProcessInfo.hThread);
    Merci

  14. #14
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pi_hellz
    Cette erreur référe à mon ELSE
    Non a la ligne précédente.
    Longword 0..4294967295 32 bits non gné
    Je te laisse faire.

  15. #15
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Merci Laurent

    Comme que je suis débutant, il a fallu que je cherche pas mal pour trouver mon erreur, ce qui est mieux de seulement me donner la réponse.

    J'ai réussi à compiler mon unité mais après ça, c'est le cataclysme .

    [Pascal Fatal Error] PVisuali.pas(7): F2063 Could not compile used unit 'RPreview.pas'
    J'obtiens des erreurs sur les éléments suivant qui d'après me donnent tous les autres erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      RPreview, RPFPrint, RPDefine, RPBase, RPCanvas, RPrinter, StdCtrls,
      Buttons, ExtCtrls;
    Merci beaucoup

  16. #16
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Il se peut que ton appli utilisait un générateur d'état ( RaveReport ?).
    Dans ce cas avec Turbo Delphi je ne sais pas commnet faire .

  17. #17
    Membre du Club
    Homme Profil pro
    Géomaticien
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 48
    Points
    48
    Par défaut
    Beaucoup Laurent pour ton aide, mais je crois que je m'embarque dans quelque chose qui est un peu trop dur pour moi. Donc, je vais parfaire mes connassaince en delphi avant de m'attaquer à ça.

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

Discussions similaires

  1. PHP For Delphi et Turbo Delphi
    Par yupa dans le forum EDI
    Réponses: 5
    Dernier message: 16/07/2009, 15h46
  2. Migration vers Turbo Delphi
    Par Just-Soft dans le forum EDI
    Réponses: 3
    Dernier message: 19/01/2009, 12h13
  3. Delphi et Turbo Delphi
    Par arkhamon dans le forum Delphi
    Réponses: 5
    Dernier message: 31/05/2007, 16h31
  4. Réponses: 1
    Dernier message: 03/03/2007, 18h02

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