Entwickler-Ecke

Dateizugriff - hab kleines Prob mit dll


foxy - Mo 27.01.03 10:18
Titel: hab kleines Prob mit dll
huhu und moin ;)

also hab ein kleines Problem: ich habe meine dll so aufgebaut:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function GetDateiDatum(const aName:String):String;
var fh     :THandle;
    fdata  :TWin32FindData;
    ft, wt :TFileTime;
    st     :TSystemTime;
begin 
  Result:='';
  fh:=FindFirstFile(PChar(aName), fdata);
  if (fh<>Invalid_Handle_Value) then 
  begin
    ft:=fdata.ftLastWriteTime;
    FileTimeToLocalFileTime(ft, wt); 
    FileTimeToSystemTime(wt, st);
    with st do Result:=Format('%0.2d.%0.2d.%0.4d', [wDay, wMonth, wYear]);
  end;
  Windows.FindClose(fh);
end;

exports
  GetDateiDatum;
begin

ich rufe die auf mit

Quelltext
1:
2:
function GetDateiDatum(const aName:String):String; 
external 'funcdll.dll';

jetzt kommt da aber immer Zeigerfehler ... kann mir einer sagen, was da falsch ist... ich habe das nach anleitung des Tuts gemacht kommt aber so ein komischer fehler und ich bekomme den nicht weg ...

zur Info noch kurz ich habe breakpoints gesetzt also er greift auf die dll zu und auch auf die function nur er verlässt sie nimma
weis einer den fehler auf anhieb??


Tino - Mo 27.01.03 10:43

Hi foxy,

hast Du die Funktion GetDateiDatum mal direkt in Dein Programm eingefügt und aufgerufen (also ohne eine DLL)? Wenn nicht dann probier es mal und schau ob der Fehler auch dann passiert und vor allem wo!

Gruß
TINO


foxy - Mo 27.01.03 10:49

Ok ich mach das ma ... aber ich denke nicht, dass das passiert,
1. weil wie gesagt habe ich in der kompletten func. breakpoints gesetzt und die funzt einwandfrei bis exports dann kommt der fehler ....
aber ich versuche das ma ...

Nachtreg also die function geht !!! ligt an der dll!!!


KeinePanik - Mo 27.01.03 10:57

Also so wie ich das sehe, kannst du bei der Funktionsdeklaration innerhalb der Dll auch noch ein stdcall; schreiben :


Quelltext
1:
2:
3:
function GetDateiDatum(const aName:String):String; [b]stdcall[/b];
var
// ...


und dann so aufrufen :


Quelltext
1:
2:
function GetDateiDatum(const aName:String):String; [b]stdcall[/b];
external 'funcdll.dll';


//edit:

Edit wieder gelöscht :D


foxy - Mo 27.01.03 11:02

ok ich versuchs

Nachtrag : JAAA :) mega THX geht nun ... hab ich voll verpeilt das steht au im Tut :roll:
hehe vielen dank


Delete - Mo 27.01.03 15:30

Hast du das mal gelesen beim Erstellen deiner DLL:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
library Project2;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muß 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,
  Classes;

{$R *.res}

begin
end.

:roll:


foxy - Mo 27.01.03 15:41

^^ war ich zu faul aber danke für den hinweis ;)


foxy - Di 28.01.03 09:32

hi all ich wieder sagt ma wenn ich doch noch eine function in die dll machen will, muss ich die doch einfach da reinsetzen, und dann unter exports einfach den namen hinzufügen oder??... weil dann bringt er mir fehler insbezüglich auf die dll


Tino - Di 28.01.03 09:34

Hallo Foxy,

foxy hat folgendes geschrieben:
muss ich die doch einfach da reinsetzen, und dann unter exports einfach den namen hinzufügen oder??

Ja.

foxy hat folgendes geschrieben:
weil dann bringt er mir fehler insbezüglich auf die dll

Und wie lautet dieser Fehler?

Gruß
TINO


foxy - Di 28.01.03 09:36

Die xxx.exe ist verknüpft mit dem fehlenden Export-xxx.dll:getPath.

genau so lautet der Fehler ....


KeinePanik - Di 28.01.03 14:02

Falsche Dateiangabe ... Pfad der *.dll im Quelltext deiner Exe stimmt nicht ...