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!

user profile iconrizla hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Beiträge zusammengefasst

Okay,
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:


Delphi-Quelltext
1:
buffer^[0] := 1;                    


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 Suche in: Delphi-Forum, Delphi-Library 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..9of 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.