Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Dll-Methodenparameter von var nach const ändern

  Alt 20. Jan 2017, 10:07
Ok danke, mit Assembler kenne ich mich kein Stück aus. Das bedeutet also nein.

Ich verstehe das mit dem Assembler aber noch nicht, wenn ich jetzt z.B. einmal gerne dasd [Ref] testen würde.

Folgender Code
Delphi-Quellcode:
program Project16;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils;

var
   a,b,c: Integer;

procedure stuffA(
   var a: Integer;
   var b: Integer;
   var c: Integer
 ); stdcall;
 begin
    asm nop end;
 end;

 procedure stuffB(
   var a: Integer;
   const [Ref] b: Integer;
   var c: Integer
 ); stdcall;
 begin
    // b := 42; // VERBOTEN
    asm nop end;
 end;

begin
   a := 10;
   b := 20;
   c := 30;

   stuffA(a,b,c);
   stuffB(a,b,c);
end.
ergibt folgende Assembly:
Code:
Project16.dpr.31: begin
004194E8 55               push ebp
004194E9 8BEC            mov ebp,esp
004194EB 83C4F0           add esp,-$10
004194EE A164B64100       mov eax,[$0041b664]
004194F3 C60001           mov byte ptr [eax],$01
004194F6 B8806E4100       mov eax,$00416e80
004194FB E89CF6FEFF      call @InitExe
Project16.dpr.32: a := 10;
00419500 C705C80E42000A000000 mov [$00420ec8],$0000000a
Project16.dpr.33: b := 20;
0041950A C705CC0E420014000000 mov [$00420ecc],$00000014
Project16.dpr.34: c := 30;
00419514 C705D00E42001E000000 mov [$00420ed0],$0000001e
Project16.dpr.36: stuffA(a,b,c);
0041951E 68D00E4200       push $00420ed0
00419523 68CC0E4200       push $00420ecc
00419528 68C80E4200       push $00420ec8
0041952D E83AD9FFFF      call stuffA
Project16.dpr.37: stuffB(a,b,c);
00419532 68D00E4200       push $00420ed0
00419537 68CC0E4200       push $00420ecc
0041953C 68C80E4200       push $00420ec8
00419541 E82ED9FFFF      call stuffB
Project16.dpr.38: end.
00419546 E831C7FEFF      call @Halt0
Das bedeutet nun dass man "const [Ref]" als Ersatz für "var" nehmen könnte?
  Mit Zitat antworten Zitat