Autor Beitrag
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: So 22.07.12 13:50 
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:

ausblenden 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

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.


Zuletzt bearbeitet von rizla am So 22.07.12 18:33, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
rizla Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
function Exec(buffer: Pointer; len: Longint): boolean; stdcall;					


In der Funktion versuch ich auf den "Buffer" zuzugreifen:

ausblenden 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?

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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?

ausblenden 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
rizla Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: 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:

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
rizla Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: Di 24.07.12 03:14 
Ähhh.. Danke schön an alle für Eure Beiträge. Entschuldigung.

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.