AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism Pointer in unsafe code eriner VCL.Net-Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer in unsafe code eriner VCL.Net-Anwendung

Offene Frage von "Luke1410"
Ein Thema von Luke1410 · begonnen am 7. Jul 2005 · letzter Beitrag vom 11. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
Luke1410

Registriert seit: 7. Jul 2005
8 Beiträge
 
#1

Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 13:53
Beim Versuch folgenden VCL.Net Code mit Delphi 2005 zu compilieren bekomme ich in der markierten Zeile diesen Compilerfehler:[Error] Unit1.pas(34): E2307 NEW standard function expects a dynamic array type identifier

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
{$UNSAFECODE ON}
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject); unsafe;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  pTest = ^tTest;
  tTest = record
     value1 : integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.nfm}

procedure TForm1.FormCreate(Sender: TObject); unsafe;
var
   test : pTest;
begin
   test := new(tTest); // <- Zeile 34
end;

end.
Kann mir jmd auf die Sprünge helfen, was ich falsch mache?
  Mit Zitat antworten Zitat
Zettuu

Registriert seit: 29. Jun 2005
Ort: Köln
6 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 14:30
Ich denke beim new sollte man einen Pointer angeben. In diesem Fall ptest.
  Mit Zitat antworten Zitat
Luke1410

Registriert seit: 7. Jul 2005
8 Beiträge
 
#3

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 14:44
Zitat von Zettuu:
Ich denke beim new sollte man einen Pointer angeben. In diesem Fall ptest.
Das ist es leider nicht.
Egal, ob ich

new(test)
new(pTest)
new(^tTest)
new(tTest)

aufrufe, die Fehlermeldung bleibt die gleiche.
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#4

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 15:10
dann mach den ganzen unsafe quark weg und benutz ne klasse

TTest = class
end;


var
xTest: TTest;


begin
xTest := TTest.Create;
...
FreeAndNil(xTest);
end;

wenn du schon .NET benutzt brauchst auch kein code der eventuell "unsafe" wäre
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#5

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 15:11
btw erfolgt der aufruf von new nich über

var
x: PTest;

begin
x := New(PTest);
end;


sondern

New(x);
  Mit Zitat antworten Zitat
Luke1410

Registriert seit: 7. Jul 2005
8 Beiträge
 
#6

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 15:32
@new Aufruf: Hatte ich bereits versucht, ging aber auch nicht (siehe weiter oben).

Auf unsafed code zu verzichten würde das Problem sicherlich umgehen, ist in meinem Fall aber nicht möglich.

Es muss doch jemanden geben der schonmal den new-Aufruf in einer VCL.Net-Anwendung verwendet hat und mir sagen kann wo mein (Denk-)Fehler liegt.
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#7

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 15:47
ich hab gedacht du verwendest New() so hier

t := new(ttest);
t := new(ptest);
t := new(^ttest);
...

New is ne Prozedur ...

andnernfalls könntest dus mal mit

var
x: PTest;

begin
GetMem(x, SizeOf(TTest));
...
FreeMem(x, SizeOf(TTest));
end;

versuchen.....
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 15:51
Zitat von Luke1410:
mir sagen kann wo mein (Denk-)Fehler liegt.
Ganz einfach: New hat unter Delphi.NET eine andere Bedeutung als es die unter Win32 hat.
Ein New in Delphi.NET entspricht einem SetLength(dynArray, Dimension1 [, Dimension2, ...]);

Delphi-Quellcode:
var
  d: array of string;
begin
  New(d, 10);
  d[9] := 'Hallo';
end;
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 15:58
Was du da machst ist IMHO komplett "sinnbefreit".
Entweder managed mit max. ein paar P/Invokes, oder native.
Was versprichst du dir denn von einem VCL.Net.Win32.whatever - Cocktail?

btw: Value types (wie es ein record nunmal ist) sind in .Net nur dumme value types...
Die werden (fast) immer kopiert und sie dürfen auch nie nil sein.
Wenn du das (aus welchen Gründen auch immer) haben willst ist .Net die falsche Plattform...

*kopf schüttel*
  Mit Zitat antworten Zitat
Luke1410

Registriert seit: 7. Jul 2005
8 Beiträge
 
#10

Re: Pointer in unsafe code eriner VCL.Net-Anwendung

  Alt 7. Jul 2005, 16:05
@barf00s: Dachte GetMem und FreeMem wären komplett aus der VCL entfernt worden. Zumindest hab ich im Netz auf mehreren Seiten gelesen, dass eben diese Aufrufe durch entsprechende Aufrufe von new() und dispose() ersetzt werden sollten. Oder verwechsel ich da jetzt was???

@jbg: Thx, das erklärt schonmal die Fehlermeldung. Aber wie soll ich dann diesen alten Win32-Aufruf ersetzen? Oder geht das überhaupt nicht? Dann wär's doch aber recht sinnlos, Pointer weiterhin in unsafed code zu erlauben, wenn man gar keinen Speicher mehr reservieren kann.

@Robert_G: Was ich mir davon verspreche ist recht einfach erklärt: Ein vorhandenes größeres Win32-Projekt mit weniger als 6 Monaten arbeitsaufwand in ein .Net Projekt zu migrieren um dadurch die Sicherheitsfeatures von .net verwenden zu können und die Möglichkeit zu haben, Code auch in anderen Programmiersprachen einfach einzubinden inkl. der Nutzung der .Net-Assembly-Verwaltungsstruktur mit der Möglichkeit den Code später in safed Code zu konvertieren und in einem 3. Schritt dann in eine WinForms.Net-Anwendung umzuwandeln.

Sry, dass ich das nicht schon vorher geschrieben habe, aber bin eher der Auffassung nur das in Posts zu schreiben, was auch wichtig zur Lösung eines Problems ist und die Community nicht mit sinnlosen großen Codefragmenten vollzusammen und Romane über das Wieso und Warum zu schreiben (zumind. nicht, wenn man eine Lösung eines einfach zu beschreibenden Problems sucht ).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:08 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