Entwickler-Ecke
Dateizugriff - Übergabe eines statischen Arrays an DLL
rizla - So 22.07.12 13:50
Titel: Übergabe eines statischen Arrays an DLL
Hi,
beim Versuch, ein statisches Array an eine Funktion in einer DLL zu übergeben, erhalten ich immer eine Zugriffsverletzung:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt LC.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 01E51EA1 in Modul 'TestDLL.dll'. Lesen von Adresse 00137BD4'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Hier die Deklaration:
Delphi-Quelltext
1: 2:
| type TExecute = function(pBuf:array of byte): boolean; stdcall; |
(Es ist ein Array[0..XX] of byte, das von der Function in der DLL bearbeitet werden soll.)
Beim Ausruf der Funktion wird die Exception ausgelöst.
Wie übergibt man statisches Arrays an eine DLL? Google behandelt sehr ausführlich das selbe Problem mit dynamischen Arrays, das bringt mich aber nicht weiter.
Bitte dringends um Hilfe :)
Beste Grüße.. rizla
Narses - So 22.07.12 14:23
Moin!
rizla hat folgendes geschrieben : |
beim Versuch, ein statisches Array an eine Funktion in einer DLL zu übergeben |
Du hast ein dynamisches Array deklariert, aber übergibst ein statisches, das ist dir schon aufgefallen? :lupe:
Wenn ich das richtig verstanden habe, ist das eh nur ein Speicherblock. Übergib einfach nur einen Zeiger und eine Länge, das sollte immer und überall klappen. :idea:
cu
Narses
rizla - So 22.07.12 14:47
Oh Narses,
Du bist mein Gott ;)
Danke Dir vielmals. Werd es gleich ausprobieren.
Moderiert von
Narses: Beiträge zusammengefasstOkay,
habs jetzt geändert auf:
Delphi-Quelltext
1:
| function Exec(buffer: Pointer; len: Longint): boolean; stdcall; |
In der Funktion versuch ich auf den "Buffer" zuzugreifen:
Funktioniert aber nicht, Delphi meldet:
Array-Typ erforderlich.
Es ist zum verzweifeln. Könnte ich bitte nochmal Erleuchtung erhalten?
Narses - So 22.07.12 19:08
Moin!
Mit einem Cast auf
PBYTEARRAY sollte das eigentlich gehen. :les: :think:
cu
Narses
Bergmann89 - So 22.07.12 21:49
Hey,
wenn das Array statisch ist, warum macht su dir nich einfach nen Datentyp dafür und übergibst den?
Delphi-Quelltext
1: 2:
| TByteArr10 = array[0..9] of Byte; function Exec(aBuffer: TByteArr10): boolean; stdcall; |
Mit Pointern geht es zwar auch, aber warum kompliziert, wenns auch einfach geht?!
MfG Bergmann.
rizla - Mo 23.07.12 09:55
Mahlzeit!
Ich hab gestern einfach ein "array of byte" übergeben und es funktioniert - ist das jetzt ganz einfach Zufall? :gruebel:
rizla - Di 24.07.12 03:14
Ähhh.. Danke schön an alle für Eure Beiträge. Entschuldigung.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!