Entwickler-Ecke
Dateizugriff - DLL: Fehler
chille07 - Sa 04.09.04 22:06
Titel: DLL: Fehler
Hallo!
Ich habe mit Microsoft Visual Studio 6.0 eine DLL geschrieben, kann sie aber nicht in Delphi einsetzen.
Wie rufe ich eine Funktion aus einer DLL auf?
thanx im voraus
mfG ©h
PS.:
Ein Schulkollege von mir hat mir geraten:
Delphi-Quelltext
1:
| function test_function(testvar: string): Boolean; stdcall; external 'test.dll'; |
Dabei kommt aber immer eine fehlermeldung.
AndyB - So 05.09.04 00:05
Titel: Re: DLL: Fehler
| chille07 hat folgendes geschrieben: |
| Dabei kommt aber immer eine fehlermeldung. |
Naja, ich würde mal vorschlagen du gehst vor die Tür, und schreist das Problem in die Luft.
Was anderes fällt mir gerade nicht zu dieser Fehlerbeschreibung ein.
PS: Vielleicht schaust du einfach mal einen Thread weiter untern nach. Da wurde eigentlich genau das selbe Thema behandelt. Nur wurde einem da etwas mehr als "Es geht nicht" geschildert.
Johannes Maier - So 05.09.04 12:00
Ist die Funktion in der DLL als __stdcall deklariert?? Wenn nicht geht es so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| type TMyFunc = function(TestVar: String): Boolean; cdecl;
procedure TForm1.Button1Click(Sender: TObject); var TestFunktion: TMyFunc; hDLL: hModule; test: Boolean; begin hDLL := LoadLibrary('meinedll.dll'); if hDLL <> 0 then begin @TestFunktion := GetProcAddress(hDLL, 'test_function'); if @TestFunktion <> nil then begin test := TestFunktion('testwort'); end; FreeLibrary(hDLL); end; end; |
Nicht getestet, allerdings sollte es so gehen. Wenn du die Funktion in der DLL als __stdcall deklariert hast (was umständlicher ist, als es nicht zu tun und einfach dann cdecl zu verwenden) dann lies mal den Thread hier drunter.
chille07 - So 05.09.04 14:02
Fehlermeldung:
Quelltext
1: 2: 3: 4: 5:
| "Im Projekt ... ist eine Exception der Klasse EAccessViolation aufgetreten.
Meldung: Zugriffsverletzung bei Adresse 000000000 Lesen von der Adresse 000000000'
Prozess wurde angehalten. ....." |
>> Johannes Maiers Prog:
@TestFunktion ist bei mir immer "nil".
dh warscheinlich, das die Funktion nicht da ist oder?
mfG ©h
Johannes Maier - So 05.09.04 15:23
Habs doch in meinem Beitrag ganz unten erwähnt @tommie ;)
@chille: Wenn du mir den Quelltext der .h und.c(pp)-Dateien der C-DLL geben kannst (per PN oder so), dann kann ich dir besser helfen ;)
Ansonsten sag einfach nochmal, wie die Funktion in der DLL deklariert ist, mit __stdcall, ohne so etwas, oder wie?
Falls du es mit __stdcall gemacht hast, dann lass das mal in der C++ - DLL einfach weg und probier meinen Code nochmal. Dann sollte er funktionieren.
uall@ogc - Mo 06.09.04 22:03
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| type var test_function(TestVar: pchar): Boolean; stdcall; @ procedure TForm1.Button1Click(Sender: TObject); var hDLL: cardianl; test: Boolean; begin hDLL := LoadLibrary('meinedll.dll'); if hDLL > 0 then begin @Test_funktion := GetProcAddress(hDLL, 'test_function'); if @Test_funktion <> nil then begin test := Test_Funktion(pchar('testwort')); end; FreeLibrary(hDLL); end; end; |
übrigens kannste auch
Delphi-Quelltext
1:
| function test_function(testvar: string): Boolean; stdcall; external 'test.dll'; |
nehmen, denk mal der zugriffverletzung nach ($00000000) lässt darauf schließen das entweder die dll net gefunden wurde (falls se net im exe ordner oder system ordner ist) oder die funktion nicht in der dll ist, d.h. du sie vill falsch geschreiuben hast
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!