AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffsverletzung nachdem eine Variable deklariert wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung nachdem eine Variable deklariert wurde

Ein Thema von derMischa · begonnen am 7. Aug 2009 · letzter Beitrag vom 7. Aug 2009
Antwort Antwort
derMischa

Registriert seit: 7. Aug 2009
5 Beiträge
 
#1

Zugriffsverletzung nachdem eine Variable deklariert wurde

  Alt 7. Aug 2009, 14:13
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 14:21
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?
$2B or not $2B
  Mit Zitat antworten Zitat
derMischa

Registriert seit: 7. Aug 2009
5 Beiträge
 
#3

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 15:01
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:

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;
Jetzt muss ich natürlich entsprechend Speicher reservieren, was ich dann wie folgt gemacht habe:

Delphi-Quellcode:

procedure InitialisiereDLL(gesamt : PGesamt); export stdcall;
begin
  GetMem(gesamt^.DataPtr, SizeOf(TData));
end;
Es folgt eine Zugriffsverletzung beim Schreiben von Adresse 00000000
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 15:11
Es folgt eine Zugriffsverletzung beim Schreiben von Adresse 00000000 das klingt danach, als wenn gesamt = nil ($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 -ieren)
$2B or not $2B
  Mit Zitat antworten Zitat
derMischa

Registriert seit: 7. Aug 2009
5 Beiträge
 
#5

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 15:59
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 16:14
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.

Bei Google suchenFramework .net

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
$2B or not $2B
  Mit Zitat antworten Zitat
derMischa

Registriert seit: 7. Aug 2009
5 Beiträge
 
#7

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 16:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 16:47
Win32 ... du erstellst damit ja native Windows-Programme
$2B or not $2B
  Mit Zitat antworten Zitat
derMischa

Registriert seit: 7. Aug 2009
5 Beiträge
 
#9

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 17:05
und welcher Version im DP-Profil entspricht das?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

Re: Zugriffsverletzung nachdem eine Variable deklariert wurd

  Alt 7. Aug 2009, 17:10
Turbo Delphi für Win32
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz