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 :

Convertir un code builder C++ en Delphi


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 43
    Points
    43
    Par défaut Convertir un code builder C++ en Delphi
    salut
    pourriez vous m'aider a traduire ce petit bout de code builder c++ vers delphi :
    je déclare la structure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    LVITEM lvi, *_lvi;
    char item[512];
    char *_item ;
    et le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM),
    MEM_COMMIT, PAGE_READWRITE);
    _item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
    PAGE_READWRITE);
    je souhaite avoire l'equivalent de ce code en syntax delphi
    c'est surtout le traduction d'utilisation des poiteurs qui me pose probléme
    et merci.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    VirtualAllocEx c'est dans Windows.pas
    LVItem dans CommCtrl.pas

    Je ne vois pas déclaration de structure (il manque typedef struct { ... } ...), je vois une déclaration d'une variable d'un type structuré

    et pour l'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _lvi := PLVITEM(VirtualAllocEx(process, NULL, sizeof(TLVITEM), MEM_COMMIT, PAGE_READWRITE));
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 43
    Points
    43
    Par défaut bonjour
    j'ai essayé mais ça na pas marcher,et je sais pas ou est le probléme
    donc je vous donne le code complet;
    ce code permet d'extraire les items d'une listview situé dans une application externe et les métre dans listbox de mon application
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    listview = lt ;// je met le handle de listview dan listview
     
    int count=(int)SendMessage(listview, LVM_GETITEMCOUNT, 0, 0);
    int i;
     
     
    LVITEM lvi, *_lvi;
    char item[512];
    char *_item ;
    unsigned long pid;
    HANDLE process;
     
    GetWindowThreadProcessId(listview, &pid);
    process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|
    PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
     
    _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM),
    MEM_COMMIT, PAGE_READWRITE);
    _item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
    PAGE_READWRITE);
     
    lvi.cchTextMax=512;
     
    for(i=0; i<count; i++) {
    lvi.iSubItem=0;
    lvi.pszText=_item;
    WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
    SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
     
    ReadProcessMemory(process, _item, item, 512, NULL);
     
     
    listBox1->Items->Add(item); //*********** ici j'ajoute les items dans listBox1
    }
    VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
    VirtualFreeEx(process, _item, 0, MEM_RELEASE);
    je vous serai tres reconnaisant si vous me traduiser ce code en delphi;
    et merci beaucoup.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    met les uses que j'ai indiqué

    J'ai quelques notions de C, mais pas de C++ (je ne comprends pas les déclarations de ton code par exemple), mais par contre, j'ai l'habitude des API Windows, donc ça peut fonctionner, je modifie le code à la volée, donc à toi de voir les erreurs de compile

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    var
      count: Integer;
      i: Integer;
      hlistview: HWND;
      lvi: TLVITEM; 
      _lvi: PLVITEM; // CommCtrl 
      Item: array[0..511] of char;
      _Item: PChar;
      pid: Cardinal;
      process: THANDLE;
    begin
     
      hlistview := lt ;// je met le handle de listview dan listview
     
      count := SendMessage(hlistview, LVM_GETITEMCOUNT, 0, 0);
     
      GetWindowThreadProcessId(listview, @pid);
     
      process = OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION, FALSE, pid);
     
      _lvi := PLVITEM(VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE));
      _item := PCharVirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE));
     
      lvi.cchTextMax := 512;
     
      for i := 0 to count - 1 do
      begin
        lvi.iSubItem := 0;
        lvi.pszText := _item;
        WriteProcessMemory(process, _lvi, @lvi, sizeof(LVITEM), NULL);
        SendMessage(listview, LVM_GETITEMTEXT, WPARAM(i), LPARAM(_lvi));
        ReadProcessMemory(process, _item, @item, 512, NULL);
     
     
        listBox1.Items.Add(item); // ici j'ajoute les items dans listBox1
      end;
      VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
      VirtualFreeEx(process, _item, 0, MEM_RELEASE);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Points : 43
    Points
    43
    Par défaut merci
    avec quelques petites modif ça marche trés bien,
    merci beaucoup pour votre aide

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    Pour ma culture, quelles sont les corrections ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 829
    Points : 15 259
    Points
    15 259
    Par défaut
    Pour ma culture, quelles sont les corrections ?
    Arf !

    Rajoute " nbw, nbr: DWORD; " dans ta déclaration des variables, puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        WriteProcessMemory(process, _lvi, @lvi, 512{sizeof(LVI)}, nbw); //nbre de bytes written
        SendMessage(hlistview, LVM_GETITEMTEXT, WPARAM(i), LPARAM(_lvi));
        ReadProcessMemory(process, _item, @item, 512, nbr); // nbre de bytes read
    --
    jp
    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
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 548
    Points : 25 118
    Points
    25 118
    Par défaut
    Lol, c'est tout, ... Merci Jipé, Toujours fidèle au poste !

    comme j'ai pondu le code sur le forum, je n'ai eu aucune vérif sur le var ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Convertir un Code VB en Delphi
    Par chlebta*tsotsi dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2010, 17h50
  2. convertir un code C++ builder en code Visual basic ?
    Par xwinner dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/05/2007, 11h04
  3. [Free Pascal] Convertir un code ASCII en entier
    Par JoseF dans le forum Free Pascal
    Réponses: 13
    Dernier message: 04/04/2006, 19h30
  4. Convertir du code ASM 68020 en C++
    Par )3lade dans le forum Linux
    Réponses: 5
    Dernier message: 13/01/2006, 10h03
  5. [mx2004]Convertir un code ASCII en une lettre
    Par caramel dans le forum Flash
    Réponses: 3
    Dernier message: 28/01/2004, 16h26

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