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 :

conversion type C


Sujet :

Langage Delphi

  1. #21
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut


    petite question bete tu as bien chargé la dll pour
    monter en memoire le code de ta fonction ?

    un peut dans ce genre

    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
    function loadDll(name: pChar): byte;
     
      procedure assign_proc(var proc: FARPROC; name: pChar);
      begin
        proc := GetProcAddress(handle, name);
        if proc = nil then status := 'erreur Dll incompatible';
      end;
     
    begin
      libereDllfree;
      if name <> nil then 
      begin
      handle := LoadLibrary(name);
      if handle = 0 then 
           //gestion d'erreur  
      else
      begin
         status := 'Dll correctement chargé';
         assign_proc(@Appel_de_ma_fonction, 'Appel_de_ma_fonction');
      end;
      end
      Result := status;
    end;
     
    procedure libereDllfree;
    begin
      if handle <> 0 then 
        FreeLibrary(handle);
      handle := 0;
      status := 'Dll inconnue';
    end;
    @+ Phil

  2. #22
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Est ce que dans les uses, où tu définis la DLL, tu as mis ShareMem ?

    Citation Envoyé par Aide delphi
    Gestionnaire de mémoire partagée (Win32 seulement)

    Sous Win32, si une DLL exporte des routines qui transmettent des chaînes longues ou des tableaux dynamiques comme paramètres ou comme résultat de fonction, que ce soit directement ou à l'intérieur d'enregistrements ou d'objets, la DLL et ses applications client (ou DLL) doivent toutes utiliser l'unité ShareMem. Cela s'applique également si une application ou une DLL alloue avec New ou GetMem de la mémoire qui est désallouée par l'appel de Dispose ou FreeMem dans un autre module. Quand elle est utilisée, l'unité ShareMem doit toujours être la première unité énumérée dans la clause uses du programme ou de la bibliothèque l'utilisant.

    ShareMem est l'unité d'interface du gestionnaire de mémoire BORLANDMM.DLL qui permet à des modules de partager de la mémoire allouée dynamiquement. BORLANDMM.DLL doit être déployé avec les applications et les DLL qui utilisent l'unité ShareMem. Quand une application ou une DLL utilise ShareMem, son gestionnaire de mémoire est remplacé par celui contenu dans BORLANDMM.DLL.

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Pour Malatar : l'utilisation de sharemem provoque des "runtime error"

    Pour Anapurna : en fait je redéfini mes fonctions dans l'implémentaion pour ne pas avoir a charger et decharger la dll.


    Au final ... tout fonctionne
    (certe j'ai utilisé des fonctions plus simples mais qui me donnent le résultat attendu !!)

    Ci dessous le code de mon unité :
    unit MesFonctions;

    interface
    uses windows;

    type
    Ptransaction = ^ttransaction_log; // Pointeur sur ma transaction

    ttransaction_log = record // ma transaction
    id : cardinal;
    reserved_1 : byte;
    index: byte;
    year : word;
    month: byte;
    day: byte;
    hour: byte;
    min: byte;
    sec: byte;
    trans_code: byte;
    flag_port: byte;
    trans_log_data_1: byte;
    trans_log_data_2: byte;
    trans_log_data_3: byte;
    reserved_2: byte;
    status: byte;
    end;

    function renvoie_id : integer;
    procedure RAZ_Transaction;
    procedure Ferme_connection;

    implementation


    function Open_PC_Comm(com : integer):integer; stdcall ;external 'madll.DLL';
    function Set_PC_Baud_Rate(baud_rate : integer):integer; stdcall ;external 'madll.DLL';
    function Set_Net_ID(net_id : integer;async:integer):integer;stdcall ;external 'madll.DLL';
    function Close_PC_Comm: integer; stdcall ;external 'madll.DLL';

    function Erase_Transaction_Log (option:integer; async : integer):integer;stdcall;external 'madll.DLL';
    function Read_Transaction_Log (option:integer;updateFlag:integer;maxEntries:integer; log : PTransaction):integer;stdcall;external 'madll.DLL';

    function renvoie_id : integer;
    var Transaction_Log_Struct,Transaction_Log_Struct2 : Ttransaction_log;
    i,j,k,resultat: integer; id : cardinal;
    begin
    resultat := Open_PC_Comm(6);
    resultat := Set_PC_Baud_Rate(57600);
    resultat := Set_Net_ID(1,0);


    resultat := Read_Transaction_Log (1,1,1, @Transaction_Log_Struct2);
    resultat := Read_Transaction_Log (1,1,1, @Transaction_Log_Struct);

    id := 0;
    if resultat = 1 then
    id :=Transaction_Log_Struct.id ;

    renvoie_id := integer(id);
    end;

    procedure RAZ_Transaction;
    var
    Transaction_Log_Struct : Ttransaction_log;
    resultat : integer;
    begin
    resultat := Erase_Transaction_Log (0,0);
    resultat := Read_Transaction_Log (1,1,1, @Transaction_Log_Struct);
    end;


    procedure Ferme_Connection;
    var resultat : integer;
    begin
    resultat := Close_PC_Comm;
    end;
    end.
    Pour ceux qui comme moi bloquent sur les pointeurs et les dll....
    Je developpe sur delphi depuis la version 1.0 et le fait a titre professionnel depuis 1997....
    Ce merveilleux site (et forum) sont quasimemnt ouverts en permanence en arriere plan de delphi, car la lecture des réponses est une éternelle source de connaissance.Je me rend compte que je m'enferme souvent dans une "routine" sans réfléchir...
    Donc encore merci a tous, car apres 2 jours et demi de blocage total (sur 7 lignes de code), la déprime me guettait !!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Conversion Types] Comparer des text
    Par pmartin8 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/11/2006, 21h58
  2. Pb conversion type vers Cstring
    Par FamiDoo dans le forum MFC
    Réponses: 6
    Dernier message: 04/08/2006, 09h58
  3. Conversion type JAVA-Oracle
    Par zuzuu dans le forum JDBC
    Réponses: 1
    Dernier message: 23/07/2006, 05h36
  4. Réponses: 5
    Dernier message: 15/11/2005, 08h57
  5. [Crystal reports Version 8.x] Conversion Type chaîne en date
    Par Audrey Stelle dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 22/10/2005, 14h58

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