![]() |
Zugriffsverletzung nachdem eine Variable deklariert wurde
Hallo zusammen,
ich programmiere an einer DLL rum, in der unter anderem 2 records definiert sind. Der zweite record beinhaltet eine Instanz des ersten records. Der erste record besteht bisher lediglich aus einer Variablen. Bis zu diesem Stand funktionierte alles super. Nachdem ich im ersten record eine weitere Variable deklariert habe, bekomme ich jetzt neuerdings einen Zugriffsfehler beim Schreiben. Die Variable wurde aber noch nicht verwendet, nur deklariert. Habt ihr eine Idee, woran es liegen könnte? Es hat sich wirklich nur diese eine Zeile verändert.
Delphi-Quellcode:
type PData = ^TData; TData = record AnzParameter : Integer; test : Integer; // <= zweite Variable end; type PGesamt=^TGesamt; TGesamt=packed record // Hier werden noch weitere Variablen deklariert DataPtr: TData; // Hier werden noch weitere Variablen deklariert end; |
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
DLL ... wird die Variable jetzt übergreifend mit der EXE verwendet?
wenn ja, haben EXE und DLL auch die selbe Definition? (wenn du da was einfügst verschiebt sich ja alles hinter DataPtr) PS: DataPtr ist kein Pointer, der Record ist direkt integriert (ist ja TData und nicht PData) PSS: und sicher, daß dieses Delphi.NET sein soll? |
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Ich denke, dass da genau das Problem liegt, dass ich da keinen Zeiger sondern ein TData verwendet habe. Das Problem ist, dass diese DLL in ein anderes Programm eingebunden wird und ich von diesem den Source nicht habe. In der Beispiel-DLL wird ein Zeiger verwendet. Das ist mir irgendwie nicht bewußt gewesen. Ich habe das jetzt so umgebogen:
Delphi-Quellcode:
Jetzt muss ich natürlich entsprechend Speicher reservieren, was ich dann wie folgt gemacht habe:type PData = ^TData; TData = record AnzParameter : Integer; test : Integer; // <= zweite Variable end; type PGesamt=^TGesamt; TGesamt=packed record // Hier werden noch weitere Variablen deklariert DataPtr: PData; // Hier werden noch weitere Variablen deklariert end;
Delphi-Quellcode:
Es folgt eine Zugriffsverletzung beim Schreiben von Adresse 00000000procedure InitialisiereDLL(gesamt : PGesamt); export stdcall; begin GetMem(gesamt^.DataPtr, SizeOf(TData)); end; |
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Delphi-Quellcode:
das klingt danach, als wenn gesamt = nil ($00000000)
Es folgt eine Zugriffsverletzung beim Schreiben von Adresse 00000000
procedure InitialisiereDLL(gesamt : PGesamt); export stdcall; begin if Assigned(gesamt) then ...Fehlerbehandlung; GetMem(gesamt^.DataPtr, SizeOf(TData)); end; und nochmals: dieses sieht mehr nach "Delphi Win32" aus und nicht nach .net (wenn dem so ist, dann kannst du deinen 1. Post hier noch entsprechend http://www.delphipraxis.net/template.../icon_edit.gif-ieren) |
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Wie von dir vorgeschlagen, habe ich das überprüft und mir ist dabei aufgefallen, dass der Fehler schon vor InitialisiereDLL auftritt. Es hat sich herausgestellt, dass diese Prozedur nicht, wie von mir fälschlicherweise angenommen, als erstes aufgerufen wird. Nachdem ich dann herausbekommen hatte, welche Prozedur das war, und hier die Speicherreservierung vorgenommen habe, funktioniert jetzt auch alles so wie gewollt. Das Hauptproblem lag darin, dass ich keinen Zugriff auf den Sourcecode des aufrufenden Programmes habe. Wie du sicherlich gemerkt hast, bin ich mit Delphi noch nicht so vertraut. Was genau ist der Unterschied zwischen Delphi Win32 und .net bzw. woran erkenne ich, was ich nutze?
|
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Delphi-nNet baut auf das dot-NET-Framwork auf und erstellt Programme für dieses,
wärend Delphi für Win32 native Windows-(32-Bit)-Programme erstellt, welche ohne über Framework direkt im Windows laufen. ![]() ![]() PS: in deinem DP-Profil kannst du auch die von dir verwendete Delphi-Version angeben, damit andere wissen auf was sich die deine Fragen beziehen |
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Wenn ich mal wüßte, welche Version ich habe ;)
Hab mir den Turbo Delphi Explorer 2006 runtergeladen. Welche Version da mitgeliefert wird, weiss ich leider nicht. |
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Win32 ... du erstellst damit ja native Windows-Programme
|
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
und welcher Version im DP-Profil entspricht das?
|
Re: Zugriffsverletzung nachdem eine Variable deklariert wurd
Turbo Delphi für Win32
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz