Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probelme mit DLL Programmierung (https://www.delphipraxis.net/111712-probelme-mit-dll-programmierung.html)

Digielm 8. Apr 2008 08:40


Probelme mit DLL Programmierung
 
Hallo ich nutze Delphi 7 und hab bei Delphitreff eine Anleitung gefunden für eine DLL zu erstellen.

Soweit klappt auch alles bis auf dieser aufruf
Delphi-Quellcode:
function einfachso : String;
var
  einfachso: Teinfachso;
  Handle : THandle;
begin
    Handle := LoadLibrary(PChar(ExtractFilePath(application.name)+'phoenix.dll'));
    @einfachso := GetProcAddress(Handle, 'einfachso');
    if @einfachso <> nil then
    begin
      result := einfachso;
    end;
    freelibrary(Handle);
end;
bei dem Aufruf freelibrary(Handle);
bekomme ich grundsätzlich eine exception. Kann mir jemand helfen und sagen warum ??

Bernhard Geyer 8. Apr 2008 08:46

Re: Probelme mit DLL Programmierung
 
Du hast in deiner DLL einen Fehler gemacht!

Ohne Quellcode der DLL sowie der Definition von Teinfachso wird das ein munderes Glaskugel-Raten.

Digielm 8. Apr 2008 08:48

Re: Probelme mit DLL Programmierung
 
ok hier der Code der DLL
Delphi-Quellcode:
library Phoenix;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }


uses
  SysUtils,
  SDL_cpuid;

{$R *.res}
function CalcStrChecksum(s: string): Longint;
var
  i: integer;
  L: integer;
begin
  Result := 0;
  l := Length(s);
  if l > 0 then
  begin
    for i := 1 to l do
      Inc(Result, Ord(s[i])*i);
  end;
end;

function einfachso : String; stdcall;
begin
//  result := GenerateCPUID +'-'+ inttostr(CalcStrChecksum(GenerateCPUID));
  result := GenerateCPUID;
end;


exports einfachso;
begin
end.

Bernhard Geyer 8. Apr 2008 08:51

Re: Probelme mit DLL Programmierung
 
Lies mal den Kommentar durch den dir Delphi angelegt hat. Ist ab und zu auch mal hilfreich.

Luckie 8. Apr 2008 08:55

Re: Probelme mit DLL Programmierung
 
Bitte hier lesen: http://www.michael-puff.de/Artikel/2...String_DLL.php

Digielm 8. Apr 2008 08:57

Re: Probelme mit DLL Programmierung
 
Sorry hatte ich übersehen klappt alles.

Danke euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz