AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Methode löst AV aus, wenn über Interface aufgerufen
Thema durchsuchen
Ansicht
Themen-Optionen

Methode löst AV aus, wenn über Interface aufgerufen

Ein Thema von implementation · begonnen am 21. Dez 2009 · letzter Beitrag vom 22. Dez 2009
Antwort Antwort
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

Methode löst AV aus, wenn über Interface aufgerufen

  Alt 21. Dez 2009, 18:57
Ich habe hier ein Interface (IGenetix) und dessen zugehörige Klasse (TGenetix).
Wenn ich eine Methode über eine Variable der Klasse direkt aufrufe, gibt es keine Probleme.
Wenn ich die Methode dann aber über ein Interface aufrufe, wird eine Access Violation ausgelöst.
Der Code für die DLL ist angehängt.
Es wird erst einmal nur GetGenetix() aufgerufen.
Angehängte Dateien
Dateityp: pas genetix_837.pas (3,0 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Methode löst AV aus, wenn über Interface aufgerufen

  Alt 21. Dez 2009, 19:14
Hallo,

ändere doch mal die lokale Variable in GetGenetix (gen) zum Typ IGenetix. Ich vermute, irgendwo stimmt die Referenzzählung sonst nicht.
Falls das nichts hilft, dann gehe mit Einzelschritt durch GetByte(), um den Fehler einzugrenzen.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Methode löst AV aus, wenn über Interface aufgerufen

  Alt 21. Dez 2009, 20:21
Hallo,

noch mal dein Code

Delphi-Quellcode:
Gen.Assign(PChar(local)); // läuft
WriteLn(Gen.GetByte('@')); // läuft
Result := Gen;
WriteLn(Result.GetByte('@')); // läuft nicht (AV)
Wie sieht es damit aus ?

Delphi-Quellcode:
var
  IGen: IGenetix;
begin
 ...
  iGen:= Gen;
  WriteLn(iGen.GetByte('@')); // ???
  Result:= Gen;
end;

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Methode löst AV aus, wenn über Interface aufgerufen

  Alt 22. Dez 2009, 13:32
Zitat von xaromz:
ändere doch mal die lokale Variable in GetGenetix (gen) zum Typ IGenetix. Ich vermute, irgendwo stimmt die Referenzzählung sonst nicht.
Habe ich schon probiert. Hilft nicht.
Zitat von xaromz:
Falls das nichts hilft, dann gehe mit Einzelschritt durch GetByte(), um den Fehler einzugrenzen.
Wenn ich die Methode direkt über die Klasseninstanz aufrufe, funzt sie ja.
Es ist auch egal, welche Methode. Auch IGenetix.Assign funzt nicht TGenetix.Assign aber schon.

[ADD]

OK ich habe das Problem jetzt gelöst.
Unverständlicherweise funktioniert es nicht mit CDECL.
Mit REGISTER und PASCAL gibt es keine Probleme.
Danke, dass ihr euch den Code angeschaut habt.
Marvin
  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 00:59 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