String, DLL et exportation de classe

cs_Bilou972 Messages postés 24 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008 - 20 mai 2004 à 18:54
eto95 Messages postés 2 Date d'inscription mercredi 3 mars 2004 Statut Membre Dernière intervention 25 juillet 2008 - 5 sept. 2005 à 16:03
Voici une chose que j'aurai du faire il y deja bien longtemps, je suis en bts info deuxieme annee, l examen approche et je suis toujours bloqué sur l'exportation de classe dans delphi; j'ai une erreur EinvalidPointerOperation a la fermeture de l'application.
Apres de longues longues heures de recherche sur les differents sites qui parlaient des DLl je n'ai toujours pas trouvé de solution a ce probleme.Peut etre y verrez vous plus clair ??

Code source de la DLL


library francaisdll;

uses
  ShareMem,
  dialogs,
  SysUtils,
  Classes;

{$R francais.res}

type
  Tdllexport = class
  public
    function GetLangStringId(StrIdx : integer): string ; virtual; stdcall; export;
  end;

function Tdllexport.GetLangStringId(StrIdx : integer): string; stdcall; export;
begin
  //showmessage ('1');
  result:= LoadStr(StrIdx);
  showmessage ('2');
end;

function GetdllexportInstance : Tdllexport; stdcall; export;
begin
  result:=Tdllexport.Create
end;

exports
  GetdllexportInstance;

begin

end.



Voici le code source de l'appli censee afficher la chaine de caractere recuperee depuis la DLL ;


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Tdllexport = class
  public
    function GetLangStringId(StrIdx : integer): string ; virtual; stdcall; export; abstract;
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

function GetdllexportInstance : Tdllexport; stdcall; external 'francaisdll';

var

  dllexport : Tdllexport;

begin

  dllexport:=GetdllexportInstance;
  label1.Caption := dllexport.GetLangStringId(1);
  dllexport.Free;

end;

end.

1 réponse

eto95 Messages postés 2 Date d'inscription mercredi 3 mars 2004 Statut Membre Dernière intervention 25 juillet 2008
5 sept. 2005 à 16:03
Salut,

je vois que tu utilise un object pour ta DLL, tres bonne idée pour utiliser des "String" ou "WideString", mais dans ce cas tu n'en a pas besoins (a moins que tu pense utiliser du texte qui depasse 255 caracteres, en plus tu evite la DLL borland pour la gestion de memoire.

voici comment je vois plutot ton code :

library francaisdll;

uses
dialogs,
SysUtils,
Classes;

{$R francais.res}

function GetLangStringId(StrIdx : integer): ShortString; stdcall; export;
begin
result := LoadStr(StrIdx);
end;

exports
GetLangStringId
begin

end.


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}

function GetLangStringId(StrIdx : integer): ShortString ; external 'francaisdll.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := GetLangStringId(1);
end;

end.

A+

Eric
0
Rejoignez-nous