Results 1 to 6 of 6

Thread: Eigen DLL geeft fout

  1. #1
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352

    Eigen DLL geeft fout

    Beste Delphi / FPC fanaten,

    Ik loop tegen een probleempje op, waarschijnlijk niet zo extreem groot probleem maar toch.
    In mijn programma probeer ik een functie vanuit een zelfgemaakte DLL te gebruiken, echter in Delphi werkt dit wel naar behoren, maar in FPC krijg ik het toch niet voor elkaar, terwijl er aan de code niets is gewijzigd.

    DLL Code:
    Code:
    library UAMPG;
    
    {$mode objfpc}{$H+}
    
    
    uses
      Classes, Sysutils
      { you can add units after this };
    
    
    function RandomPassword(PLen: Integer): string; export;
    var
      str: string;
    begin
      Randomize;
      str := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0912345678-+,.!@#$%^&*()';
      Result := '';
    repeat
      Result := Result + str[Random(Length(str)) + 1];
      until (Length(Result) = PLen)
    end;
    
    
    function SimplePassword(PLen: Integer): string; export;
    var
      str: string;
    begin
      Randomize;
      str := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0912345678';
      Result := '';
    repeat
      Result := Result + str[Random(Length(str)) + 1];
      until (Length(Result) = PLen)
    end;
    
    
    exports
      RandomPassword,
      SimplePassword;
    
    
    begin
    end.
    
    
    
    
    begin
    end.


    Aanroepen vanuit het testprogramma :

    Code:
    unit uaminv;
    
    {$mode objfpc}{$H+}
    
    
    interface
    
    
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      Buttons, ExtCtrls;
    
    
    type
    
    
      { TAUMadd }
    
    
      TAUMadd = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        btnChksite: TSpeedButton;
        btnPassword: TSpeedButton;
        Panel1: TPanel;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        SpeedButton4: TSpeedButton;
        procedure btnPasswordClick(Sender: TObject);
        procedure Edit3Change(Sender: TObject);
        procedure Edit5Change(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
    
    
    var
      AUMadd: TAUMadd;
    
    
      function RandomPassword(PLen: Integer): string; external 'UAMPG.dll';
      function SimplePassword(PLen: Integer): string; external 'UAMPG.dll';
    
    
    
    
    implementation
    
    
    {$R *.lfm}
    
    
    { TAUMadd }
    
    
    procedure TAUMadd.FormCreate(Sender: TObject);
    begin
      AUMAdd.Position := poMainFormCenter;
      btnChkSite.Visible := false;
      btnPassword.Visible := false;
    end;
    
    
    procedure TAUMadd.Edit3Change(Sender: TObject);
    begin
      btnChkSite.Visible := True;
    end;
    
    
    procedure TAUMadd.btnPasswordClick(Sender: TObject);
    begin
      Edit5.Text := SimplePassword(10);
    end;
    
    
    procedure TAUMadd.Edit5Change(Sender: TObject);
    begin
      btnPassword.Visible := True;
    end;
    
    
    end.
    Nu kan ik er totaal niet achter komen waar het probleem ligt, de hints staan aan, maar deze geven niets aan, ook de DLL compileert gewoon.
    Kortom, wie kan mij een heel klein beetje op de goede weg helpen, alvast bedankt.
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    ik zie als voorbeeld bij lazarus forum dit voorbij komen
    Delphi Code:
    1. procedure gtk_widget_set_events(widget:PGtkWidget; events:gint); cdecl; external gtklib;

  3. #3
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352
    Dank je voor je antwoord, helaas is dat het niet, ik had dit al geprobeerd.

    Heb het even zitten testen, zodra ik het programma buiten FPC opstart, dan krijg ik een access violation de functie werkt overigens wel, en genereert dus een password.
    Begint een beetje te lijken op een geheugen probleem, of ik kan het mis hebben.
    Last edited by AntonSteen; 01-Aug-14 at 18:09. Reason: Typefout verwijderd
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  4. #4
    Om je op de weg te helpen... :

    Je hebt dit gecompileerd met fpc mode (met ansistring compatibiliteit) {$mode objfpc}{$H+}.

    Grappige is als ik het in de DLL en jouw programma verander in {$H-} dat het zonder foutmeldingen werkt.

    Dus in die richting (ansistring vs widestring) zul je het moeten zoeken.

    Edit:
    van hier
    (ansi)strings are no standart types and cannto exported from an library without special memmanager, use pchar
    Dus of je moet PChar (PWidestring) gebruiken of gewoon dit werkt ook:
    Code:
    function SimplePassword(PLen: integer): widestring; export;
    Last edited by rvk; 01-Aug-14 at 18:35.

  5. #5
    Senior Member AntonSteen's Avatar
    Join Date
    Dec 2006
    Location
    IJsselmonde (Rotterdam)
    Posts
    352
    Je bent een genie rvk, mijn dank is verpletterend, het werkt.
    Lazarus als hobby, en dan niet in de kroeg
    http://www.wavdsteen.com

  6. #6
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Dit lijkt mij gewoon het gebruik van managed types (strings) over DLL grenzen. Dan heb je twee verschillende memory allocators.

    In het geval van widestrings op Windows, zijn deze COM gemanaged, en dus wat meer compatible. Maar dat is een uitzondering

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •