DLL et passage de paramètres [DELPHI] - Delphi/Pascal - Programmation
Marsh Posté le 07-12-2004 à 13:46:33
C'est quoi la question ?
Marsh Posté le 07-12-2004 à 16:24:41
La question c'est comment passer un record d'une DLL à mon appli.
Marsh Posté le 07-12-2004 à 16:25:56
comme tu passerais une autre variable, non ?
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 !...
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...
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.
Marsh Posté le 07-12-2004 à 18:11:42
là je ne sais pas pourquoi ça ne marche pas
Marsh Posté le 14-12-2004 à 08:58:20
Tu as essaye en ajoutant Sharemem dans ta dll et ton code ??
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.