AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record mit DCom übertragen

Ein Thema von GerMan62 · begonnen am 30. Sep 2009 · letzter Beitrag vom 30. Sep 2009
Antwort Antwort
GerMan62

Registriert seit: 25. Okt 2006
9 Beiträge
 
#1

Record mit DCom übertragen

  Alt 30. Sep 2009, 19:57
Hallo Gemeinde.

Ich habe folgenden Programmcode.
Delphi-Quellcode:
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;
Nun meine Fragen:
Packe ich das ganze richtig in ein PSafeArray ein?
Kann ich die Record-Strucktur auch so schreiben?
Delphi-Quellcode:
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;
Vorab schonmal Danke für eure Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

Re: Record mit DCom übertragen

  Alt 30. Sep 2009, 20:15
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 01:49 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