![]() |
Record mit DCom übertragen
Hallo Gemeinde.
Ich habe folgenden Programmcode.
Delphi-Quellcode:
Nun meine Fragen:
type
TMesswert = record Bezeichnung : string[80]; // z.B. EMK A1-A2 Wert : string[80]; // z.B. 185.4 Einheit : string[80]; // z.B. V Min_Wert : string[80]; // z.B. 180.0 Max_Wert : string[80]; // z.B. 190.0 end; TMessreihe = record Name : string[80]; // z.B. Messwerte oder VDE-Messwerte Messwert : array[0..100] of TMesswert; end; procedure TForm2.Button3Click(Sender: TObject); var Messreihe : TMessreihe; P : Pointer; Temp : OleVariant; X : Integer; begin for X := 0 to 50 do begin Messreihe.Messwert[X].Bezeichnung := SD_Grid.Cells[0,X + 1]; Messreihe.Messwert[X].Wert := SD_Grid.Cells[1,X + 1]; Messreihe.Messwert[X].Einheit := SD_Grid.Cells[2,X + 1]; Messreihe.Messwert[X].Min_Wert := SD_Grid.Cells[3,X + 1]; Messreihe.Messwert[X].Max_Wert := SD_Grid.Cells[4,X + 1]; end; // in ein PSafeArray packen Temp := VarArrayCreate([0, SizeOf(Messreihe) - 1], varByte); P := VarArrayLock(Temp); try Move(Messreihe, P^, SizeOf(Messreihe)); finally VarArrayUnlock(Temp); end; end; Packe ich das ganze richtig in ein PSafeArray ein? Kann ich die Record-Strucktur auch so schreiben?
Delphi-Quellcode:
Vorab schonmal Danke für eure Hilfe.
type
TMesswert = record Bezeichnung : string; // z.B. EMK A1-A2 Wert : string; // z.B. 185.4 Einheit : string; // z.B. V Min_Wert : string; // z.B. 180.0 Max_Wert : string; // z.B. 190.0 end; TMessreihe = record Name : string; // z.B. Messwerte oder VDE-Messwerte Messwert : array[0..100] of TMesswert; end; |
Re: Record mit DCom übertragen
Also in diesem Fall müßtest die die Stringinhalte selber (einzeln) reinkopieren
oder alle einzeln übertragen, da von den String ja nur der interne Pointer im Array/Record liegen würde. Ich weiß jetzt nicht in wie weit OleVariant und Variant kompatibel sind, aber ich glaub dieses könnte gehn (da dein Array/Record nur aus Strings besteht) es wäre dann ein Variant vom Typ varOleStr+varArray ... also ein OleString-/WideString-Array String, AnsiString und UnicodeString sind ja nur delphi-eigene Erweiterungen und dürften in bei DCOM/OLE nicht gehn ... WideString ist nur eine Umleitung zum OLE-String
Delphi-Quellcode:
type
TMesswert = record Bezeichnung : WideString; // z.B. EMK A1-A2 Wert : WideString; // z.B. 185.4 Einheit : WideString; // z.B. V Min_Wert : WideString; // z.B. 180.0 Max_Wert : WideString; // z.B. 190.0 end; TMessreihe = record Name : WideString; // z.B. Messwerte oder VDE-Messwerte Messwert : array[0..100] of TMesswert; end; TMessTransfer = array[0..505] of WideString; PMessTransfer = ^TMessTransfer; procedure TForm2.Button3Click(Sender: TObject); var Messreihe : TMessreihe; P : Pointer; Temp : OleVariant; X : Integer; begin for X := 0 to 50 do begin Messreihe.Messwert[X].Bezeichnung := SD_Grid.Cells[0,X + 1]; Messreihe.Messwert[X].Wert := SD_Grid.Cells[1,X + 1]; Messreihe.Messwert[X].Einheit := SD_Grid.Cells[2,X + 1]; Messreihe.Messwert[X].Min_Wert := SD_Grid.Cells[3,X + 1]; Messreihe.Messwert[X].Max_Wert := SD_Grid.Cells[4,X + 1]; end; Temp := PMessTransfer(@Messreihe)^; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz