Partage
  • Partager sur Facebook
  • Partager sur Twitter

convertir un programme

pascal vers c++

5 novembre 2006 à 13:09:54

Pascal Delphi vers C++

Bonjour,
je suis nouveau sur ce forum et débutant en programation(j'apprend le language c avec les tutorials). :euh:
Malgré cela j'aimerai être aider à convertir un programme.
Ce programme permet de comander un module externe branché sur le port usb en //com3.Je suis désoler si je ne suis pas clair dans mes explications mes ne connaissant pas le language delphi, j'ai un peu de mal à m'expliquer. :o

Voici le programme:
</code>
//UnitTEST_USB

unit UnitTEST_USB;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  UnitPortSerieXP, StdCtrls;

type
  TForm1 = class(TForm)

  end;

var
  Form1: TForm1;
  Data:array[1..8] of Boolean;
  numcom:integer;
  i:integer;
  Ordre_Data:array[1..8] of Byte;

  implementation

{$R *.DFM}

// SELECTION DU PORT COM ET OUVERTURE ==========================================

begin
 numCom:=3;
 if not(InitCom(numCom,9600,NOPARITY,ONESTOPBIT)) then
  ShowMessage( 'Impossible d''ouvrir COM'+inttostr(numCom) );

// CHANGEMENT D'ETAT D'UNE SORTIE ==============================================

i:=7;
Data[i]:=true;

// PROCEDURE D'ENVOI DES DONNEES AU MONTAGE ====================================
 // Ordre dans lequel les données doivent être envoyées-------------------------
 Ordre_Data[1]:=1;
 Ordre_Data[2]:=2;
 Ordre_Data[3]:=3;
 Ordre_Data[4]:=4;
 Ordre_Data[5]:=8;
 Ordre_Data[6]:=7;
 Ordre_Data[7]:=6;
 Ordre_Data[8]:=5;

 // Envoi des données via le port série-----------------------------------------
 DTRon; //STROBE=0
 for i:=8 downto 1 do
 begin
  TXDon; //CLK=0
  if Data[ Ordre_Data[i] ] then RTSoff else RTSon; //DATA
  TXDoff; //CLK=1
 end;
 DTRoff; //STROBE=0
end.

//#########################FIN####################################

UnitPortSerieXP

{*******************************************************************************
  Fonctions et procédure permettant de piloter les lignes du port série du PC
 comme des lignes d'Entrées / Sorties
*******************************************************************************}


unit UnitPortSerieXP;

interface

uses
  Windows,Messages,SysUtils,Classes;

Function InitCom(Com:Integer;Vitesse:LongInt;Parite:Byte;stopsBits:Byte):Boolean;
Procedure CloseCom;
Function TXDon:Boolean;
Function TXDoff:Boolean;
Function DTRon:Boolean;
Function DTRoff:Boolean;
Function RTSon:Boolean;
Function RTSoff:Boolean;
Function CTS:boolean;
Function DCD:boolean;
Function DSR:boolean;
Function RI:boolean;
Function Lecture:Byte;

implementation

var dcbCom:TDCB;
    hPort:LongInt;

//==========================================================================================
//Initialisation du port COM
FunctionInitCom(Com:Integer;Vitesse:LongInt;Parite:Byte;stopsBits:Byte):Boolean;
begin
 hPort:=CreateFile(PChar('COM'+IntToStr(Com)),
        GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,LongInt(0));
 if (hPort=LongInt(INVALID_HANDLE_VALUE)) then
     result:=false
 else
 begin
  if GetCommState(hPort,dcbCom) then
  begin
   dcbCom.Baudrate:=Vitesse;
   dcbCom.ByteSize:=8;
   dcbCom.Parity:=Byte(Parite);
   dcbCom.Flags:=0;
   SetCommState(hPort,dcbCom);
   result:=true;
  end
  else
   result:=false;
 end;
end;

//==========================================================================================
//Fermeture du port COM
Procedure CloseCom;
begin
 try
  CloseHandle(hPort);
 finally;
 end;
end;

//==========================================================================================
//TXD ON
Function TXDon:Boolean;
begin
 result:=EscapeCommFunction(hPort,SETBREAK);
end;

//==========================================================================================
//TXD OFF
Function TXDoff:Boolean;
begin
 result:=EscapeCommFunction(hPort,CLRBREAK);
end;

//==========================================================================================
//DTR ON
Function DTRon:Boolean;
begin
 result:=EscapeCommFunction(hPort,SETDTR);
end;

//==========================================================================================
//DTR OFF
Function DTRoff:Boolean;
begin
 result:=EscapeCommFunction(hPort,CLRDTR);
end;

//==========================================================================================
//RTS ON
Function RTSon:Boolean;
begin
 result:=EscapeCommFunction(hPort,SETRTS);
end;

//==========================================================================================
//RTS OFF
Function RTSoff:Boolean;
begin
 result:=EscapeCommFunction(hPort,CLRRTS);
end;

//==========================================================================================
//LECTURE CTS
Function CTS:Boolean;
var state:Cardinal;
begin
 if GetCommModemStatus(hPort,State) then
 begin
  if (state and MS_CTS_ON)<>0 then result:=true else result:=false;
 end
 else
  result:=false;
end;

//==========================================================================================
//LECTURE DSR
Function DSR:Boolean;
var state:Cardinal;
begin
 if GetCommModemStatus(hPort,State) then
 begin
  if (state and MS_DSR_ON)<>0 then result:=true else result:=false;
 end
 else
  result:=false;
end;

//==========================================================================================
//LECTURE DCD
Function DCD:Boolean;
var state:Cardinal;
begin
 if GetCommModemStatus(hPort,State) then
 begin
  if (state and MS_RLSD_ON)<>0 then result:=true else result:=false;
 end
 else
  result:=false;
end;

//==========================================================================================
//LECTURE RI
Function RI:Boolean;
var state:Cardinal;
begin
 if GetCommModemStatus(hPort,State) then
 begin
  if (state and MS_RING_ON)<>0 then result:=true else result:=false;
 end
 else
  result:=false;
end;

//==========================================================================================
//LECTURE DES 4 ENTREES, RETOURNE UN MOT CODE SUR 4 BITS
Function Lecture:Byte;
var DATA:Byte;begin
 DATA:=0;
 if CTS then DATA:=DATA AND 1;{LSB}
 if DSR then DATA:=DATA AND 2;
 if RI  then DATA:=DATA AND 4;
 if DCD then DATA:=DATA AND 8;{MSB}
 result:=DATA;
end;

end.

###############################FIN####################################
<code type="delphi">

J'aurai aussi quelques questions:

UnitPortSerieXP(dans les used) correspond-il à un header au language C ?
Est-ce que j'ai besoin de tous ces used pour que mon programme fonctionne(je suppose que les used correspondent au header) ?
Qu'est ce que le Type

voila rien que cela ^^

En esperant ne pas vous embéter

Damien
  • Partager sur Facebook
  • Partager sur Twitter
5 novembre 2006 à 18:17:38

Le message qui suit est une réponse automatique activée par un modérateur.
Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.


Merci d'utiliser les balises de code


Bonjour,

Les forums du Site du Zér0 disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source.
Vous avez posté un code source sans utiliser cette fonctionnalité. Pourriez-vous éditer votre message en entourant votre code des balises &lt;code &gt; et &lt;/code&gt; ?

Cela aura pour effet de "colorer" votre code et donc d'en faciliter grandement la lecture. Vous aurez ainsi beaucoup plus de chances d'avoir des réponses.

Voici un exemple de code non coloré avec la balise "citation" (mauvais exemple) :

Citation

int main(int argc, char *argv[])
{
long choixOperation;

printf("Choisissez l'operation a effectuer");
/* etc. */
}



Voici maintenant le même code coloré, si vous aviez utilisé la balise "code" (bon exemple) :

int main(int argc, char *argv[])
{
    long choixOperation;

    printf("Choisissez l'operation a effectuer");
    /* etc. */
}


C'est plus clair n'est-ce pas ? :)
N'hésitez pas à éditer votre message pour changer la balise afin de colorer votre code.

Plus d'informations à ce sujet


Merci de votre compréhension :)
Les modérateurs.
  • Partager sur Facebook
  • Partager sur Twitter
5 novembre 2006 à 20:47:12

Oui je voudrais bien mais je ne conais pas le language pascal et je croi qu'il y a que des fonctions. :euh:
J'ai passer beaucoup de temps à essayer de convertir et si je pouvais avoir quelques règle de convertion...comme := en pascal donne -> en c.

  • Partager sur Facebook
  • Partager sur Twitter
5 novembre 2006 à 20:53:03

je m'en fiche que tu connaisses pas le pascal, ce que je te demande c'est de mettre les balises <code type="pascal"></code> autour de ton code dans ton 1er message
  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2007 à 20:23:44

je voudrais suprimer ce sujet
comment on fait???
  • Partager sur Facebook
  • Partager sur Twitter
26 janvier 2007 à 21:33:13

Ba si un modérateur passe par là il le fera ^^
  • Partager sur Facebook
  • Partager sur Twitter
24 avril 2022 à 17:10:49 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


24 avril 2022 à 18:01:25

Tu déterres un vieux sujet datant de 2006/2007 et tu ne donnes pas le contexte de ton intervention.
Crée ton propre sujet et sois plus clairr.
Pour ce qui est du post original:
J'ai déjà converti un programme Pascal en C avec plusieurs commandes pour GNU sed.
J'ai fait la conversion à plus de 95% et le reste à la main.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

24 avril 2022 à 18:48:20

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter