[DELPHI] DLL et passage de paramètres

DLL et passage de paramètres [DELPHI] - Delphi/Pascal - Programmation

Marsh Posté le 07-12-2004 à 13:04:50    

Bonjour !
 
Je vous expose mon problème : je cherche a passer des paramètres de type record, voir un array de ce record, entre une DLL et mon programme.
Je pourrai tenter de faire autant de procedure qui retournent chacune un elément du record mais en supposant que celui-ci soit gros (contenant beaucoup d'elément de type varié - PChar, Int)...
Merci d'avance...
 
Josh.

Reply

Marsh Posté le 07-12-2004 à 13:04:50   

Reply

Marsh Posté le 07-12-2004 à 13:46:33    

C'est quoi la question ? :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-12-2004 à 16:24:41    

La question c'est comment passer un record d'une DLL à mon appli.

Reply

Marsh Posté le 07-12-2004 à 16:25:56    

comme tu passerais une autre variable, non ? :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-12-2004 à 16:31:01    

Ben non parce que lorsque je lis le record venant de la DLL il m'écrit n'importe quoi...
Par exemple : un record contenant un PChar et un int que la DLL passe, mon appli affiche &"'('"é('"&è-é(& dans le PChar et -1236543 dans l'integer (qui sont des valeurs qui n'ont rien à voir avec ce qu'il y avait dans la DLL !...

Reply

Marsh Posté le 07-12-2004 à 17:25:40    

Essaie en déclarant les record comme étant des packed record.
Sinon poste un peu de code...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-12-2004 à 17:27:57    

ouai, ok j'essai le packed record... avant le code !...

Reply

Marsh Posté le 07-12-2004 à 17:36:46    

Bon même avec le packed record ça marche pas...
MON CODE DLL :
library noyau;
 
uses
  SysUtils,
  Classes;
 
const
  MODUL_VERSION = '0.1 - ALPHA' ;
 
type
  TCervoTST = packed record
    Name : PChar ;
    Index : Integer ;
  end ;
 
{$R *.RES}
 
function GiveNoyauVersion : PChar; stdcall;
begin
 result := MODUL_VERSION ;
end;
 
function GiveCervo : TCervoTST ; stdcall;
Var Cervo : TCervoTST ;
begin
 Cervo.Name := 'Nom Cerveau !' ;
 Cervo.Index := 10 ;
 result := Cervo ;
end;
 
exports
 GiveNoyauVersion;
exports
 GiveCervo;
 
begin
end.
 
MON CODE APPLI :
procedure TForm1.Button5Click(Sender: TObject);
type
 TGetVer = Function : PChar ; stdcall ;
 TGetCervo = Function : TCervoTST ; stdcall ;
Var
 GetVer : function : PChar ;
 GetCervo : function : TCervoTST ;
 Handle: THandle ;
 Cervo : TCervoTST ;
begin
 Handle := loadlibrary('system\noyau.dll');
 
 if Handle <> 0
 then begin
      try
        @GetVer := GetProcAddress(Handle, 'GiveNoyauVersion');
        if @GetVer <> nil
        then begin
             ShowMessage(GetVer);
             end;
        @GetCervo := GetProcAddress(Handle, 'GiveCervo');
        if @GetCervo <> nil
        then begin
             Cervo := GetCervo ;
             ShowMessage(Cervo.Name + #13 + IntToStr (Cervo.Index));
             end;
      Finally
        FreeLibrary(Handle);
      end;
      end
 else begin
      ShowMessage('Impossible de charger la DLL');
      end;
 
end;
 
Voila ! rien de bien compliqué dans l'absolu mais en pratique ça marche pas.

Reply

Marsh Posté le 07-12-2004 à 18:11:42    

là je ne sais pas pourquoi ça ne marche pas :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-12-2004 à 08:58:20    

Tu as essaye en ajoutant Sharemem dans ta dll et ton code ??

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed