Toon posts:

[delphi] Priviledged instruction fout?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg een Priviledged instruction foutmelding als ik Apply aanroep in TLowercase Processor. Om precies te zijn: het gaat fout als Process aanroepen wordt in Apply.

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
constructor TOperationProcessor.Create(ItemList: TStringList);
var Token: string;
begin
 fStringList := ItemList;
end

function TOperationProcessor.Process(const S: string): string; // VIRTUAL
begin
 // Put something here
end;

procedure TOperationProcessor.Apply;
var I: Integer;
    S: string;
begin
 for I := 0 to fStringList.Count - 1 do
  begin
   S := fStringList[I];
   fStringList.Delete(I);
   fStringList.Insert(I,Process(S));
  end;
end;

// DEZE OVERRIDE HEM

function TLowerCaseProcessor.Process(const S: string): string; // OVERRIDE
begin
 Result := LowerCase(S);
end;



Als je dan LowerCaseProcces.Apply aanroept gaat het mis... Weet iemand wat ik moet doen om dit te voorkomen (Priviledged instruction foutmelding)?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:22

Creepy

Tactical Espionage Splatterer

Zou je je code tussein [ code=delphi ] willen zetten? Dat is wat leesbaarder.
En het zal wel een mij liggen, maar ik ken heel die TOperationProcessor en TLowerCaseProcessor niet om er iets zinnigs over te kunnen zeggen verder.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Het gaat erom dat ik een bij een geërft object een nieuwe process procedure definieer en Apply van de Parent zou hem dan aan moeten roepen. Het idee van virtual en override. dat weigert hij op een of andere manier...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:22

Creepy

Tactical Espionage Splatterer

Nou daar lijkt het niet op. Een privileges instruction krijg je bijv. als je op windows NT/2000 rechtstreeks I/O probeert te doen (wat onder 9x / ME wel goed gaat)[/ME]

Trouwens, als je in TOperationProcessor een process() aanroept, zal deze volgens mij NIET de TLowerCase Process aanroepen. Je zult dit buiten je object definitie moeten doen.

Een
Delphi:
1
2
3
4
5
var blaat = TOperationProcessor
begin
   blaat:=TLowerCaseProcessor
   blaat.process; // roept TLowerCase Processor aan, terwijl blaat een TOperationProcessor
end;

gaat dan weer wel goed.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 16 november 2002 @ 19:53:
Delphi:
1
2
3
4
5
var blaat = TOperationProcessor
begin
   blaat:=TLowerCaseProcessor
   blaat.process; // roept TLowerCase Processor aan, terwijl blaat een TOperationProcessor
end;
ik creëer wel een TList (voor objecten) met descendants (afstammelingen) van TOperationProcessor (bijv. TLowerCaseProcessor). En dan wil van elk object in die lijst Apply doen. Dus:
Delphi:
1
2
3
4
for I := 0 to ObjectList.Count - 1 do
 begin
  TOperationProcessor(ObjectList[I]).Apply
 end;


Hierbij zou die dus de Apply van de descendant moeten aanroepen (die is namelijk overridden)...

Het nut ervan is dat ik voor elk object in de lijst (dezelfde) Apply kan aanroepen...

Kan dit/Mag dit?

WC.Bril

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:22

Creepy

Tactical Espionage Splatterer

Dat kan prima. Zolang je die .aply maar niet in een superklasse van TOPerationProcessor doet.

Wat je ook kan doen is een descendant maken van TObjectlist waar je de items property opnieuw aanmaakt
Delphi:
1
property items[index: integer]: ToperationProcessor read Fitems write Fitems; default

Dan kan je dus zonder cast toch je .apply aanroepen
Delphi:
1
Processorlist[i].apply

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1