AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-Problem (bei dynamischer Einbindung)

Ein Thema von katjah · begonnen am 21. Aug 2006 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
katjah

Registriert seit: 6. Aug 2006
Ort: Herborn
28 Beiträge
 
#1

DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 12:40
Ich habe Probleme mit der Verwendung von DLLs.
Beim statischen Einbinden funktioniert dasselbe problemlos. Sobald das ganze dynamisch eingebunden wird, gibt es Probleme:
entweder liefert die Funktion oder Müll zurück oder aber das ganze bricht mit einem Laufzeitfehler (mit Anzeige des CPU-Fensters) ab.
Das ganze scheint sich also irgendwas im Speicher zu zerdeppern.
Evtl. hat von Euch einer eine Idee, was ich da noch falsch mache ?

Hier der Code der dll:
Delphi-Quellcode:
library TurnFkt;
 
uses
  SysUtils,
  Classes;

{$R *.res}

var ColCaption:string;

function GetColCaption(ColName,Spezial:PChar): PChar;stdcall;
begin
    ColCaption:=ColName;
  Result:=PChar(ColCaption);
end;

exports GetColCaption;

begin
end.
und hier die Funktion im aufrufenden Programm:
Delphi-Quellcode:
function GetColCaption(ColName,Spezial:PChar): PChar;stdcall;
// external '../TurnFkt.dll';
type TGetColCaption=function(ColName,Spezial:PChar): pchar;
var FGetColCaption:TGetColCaption;
    Handle : THandle;
begin
  Handle:=LoadLibrary(Pchar('../TurnFkt'));
  if Handle<>0 then
  begin
    @FGetColCaption:=GetProcAddress(Handle,'GetColCaption');
    if @FGetColCaption<>nil then
      Result:=FGetColCaption(ColName,Spezial);
    FreeLibrary(Handle);
  end;
end;
Als Anleitung habe ich das Dll-Tutorial von www.dsdt.info verwendet, Sharemem möchte ich nicht einsetzen.

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt. Mfg, SirThornberry[/edit]
Gruß Katja
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 13:03
beim statichen einbinden hast du die Aufrufconvention (stdcall) angegeben, beim dynamischen nicht. Und genau da liegt der Fehler. Wenn dann so:
type TGetColCaption=function(ColName,Spezial:PChar): pchar; stdcall;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
katjah

Registriert seit: 6. Aug 2006
Ort: Herborn
28 Beiträge
 
#3

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 14:07
Danke für den Hinweis, aber damit funktioniert es leider auch nicht.
Gruß Katja
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 14:10
Hmm
@FGetColCaption:=GetProcAddress(Handle,'GetColCaption'+#0); Vielleicht so?

Frank
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 14:48
hmm .. ich denke es liegt daran ...

Delphi-Quellcode:
    if @FGetColCaption<>nil then
      Result:=FGetColCaption(ColName,Spezial);
    FreeLibrary(Handle);
Du bekommst einen Pointer auf eine Zeichenkette und speicherst den in Result.
Wenn du jetzt FreeLibrary aufruft wird der Pointer Zerstört und du bekommst nur noch Müll!

probiers mal so:
Delphi-Quellcode:
function GetColCaption(ColName, Spezial: PChar): string;
type
  TGetColCaption = function(ColName, Spezial: PChar): PChar;

var
  FGetColCaption : TGetColCaption;
  Handle : THandle;

begin
  Handle := LoadLibrary(PChar('../TurnFkt'));

  if Handle <> 0 then
    begin
      @FGetColCaption := GetProcAddress(Handle, 'GetColCaption');
      if @FGetColCaption <> nil then
        Result := FGetColCaption(ColName, Spezial)^;
      FreeLibrary(Handle);
    end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 14:52
Handle:=LoadLibrary(Pchar('../TurnFkt.dll')); Fehlt vielleicht nur die Endung?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 14:52
  Handle:=LoadLibrary(Pchar('../TurnFkt.dll')); Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#8

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 14:56
Zitat von _frank_:
  Handle:=LoadLibrary(Pchar('../TurnFkt.dll')); Gruß Frank

Dürfte nicht weiter relevant sein .. s. MSDN

Zitat:
If the string does not specify a path, the function uses a standard search strategy to find the file. See the Remarks for more information.
If no file name extension is specified in the lpFileName parameter, the default library extension .dll is appended. However, the file name string can include a trailing point character (.) to indicate that the module name has no extension.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#9

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 15:34
stümmt, man lernt nie aus

ist denn das Handle <>0? schonmal mit dem debugger geschaut?
nicht dass er mit dem relativen Pfad nicht klar kommt...

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: DLL-Problem (bei dynamischer Einbindung)

  Alt 21. Aug 2006, 15:42
Zitat von _frank_:
stümmt, man lernt nie aus

ist denn das Handle <>0? schonmal mit dem debugger geschaut?
nicht dass er mit dem relativen Pfad nicht klar kommt...

Gruß Frank
Ich habe doch oben schon erklärt wo der Fehler liegt ... wenn Handle=0 ist würde nichts in Result stehen !
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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