AGB  ·  Datenschutz  ·  Impressum  







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

ActiveX SafeArray Sample-code

Ein Thema von Schlingel · begonnen am 27. Jul 2014 · letzter Beitrag vom 11. Sep 2014
 
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: ActiveX SafeArray Sample-code

  Alt 11. Sep 2014, 10:31
Schwieriges Thema. Bin noch nicht erfahren genug dafür, aber wie wäre es mit folgender Idee:

Delphi-Quellcode:
type
  TMyStruct = record
    Val_1 : Integer;
    Val_2 : Extended;
  end;
Delphi-Quellcode:
  protected
    procedure Get_MyArray(var Data : OleVariant); safecall;
Delphi-Quellcode:
procedure TA0001.Get_MyArray(var Data: OleVariant);
var
  MStream : TMemoryStream;
  Address : Pointer;
  MyStruct : TMyStruct;
begin
  MStream := TMemoryStream.Create;
  try
    //Vorbereiten
    MyStruct.Val_1 := Random(100);
    MyStruct.Val_2 := Random();
    MStream.SetSize(SizeOf(TMyStruct));
    MStream.Position := 0;
    MStream.Write(MyStruct,SizeOf(TMyStruct));
    //VariantArray
    Data := VarArrayCreate([0,MStream.Size-1],varByte);
    Address := VarArrayLock(Data);
    MStream.Position := 0;
    MStream.Read(Address^,MStream.Size);
  finally
    VarArrayUnlock(Data);
    MStream.Free;
  end;
end;
Beim Aufruf muss man dann Data als ByteArray betrachten und das dann auf die Struktur von TMyStruct abbilden:
D.h. Val_1 steckt in den ersten 4 bytes und Val_2 in den übrigen (Achtung 32bit (10byte) unterscheidet sich von 64bit (8byte) ).
http://docwiki.embarcadero.com/RADSt...Einfache_Typen

Schreiben sollte auch in der Art (Die Arrays als EIN ByteArray an dein ActiveX Element übergeben) möglich sein. Deine Schnittstelle muss dann nur die Größe des ByteArrays auswerten ( durch die Größe eines Records teilen) und die Anzahl in ein RecordArray schreiben. Habe das selber benutzt um ein Bitmap mit 25 MByte prozessübergreifend zu übertragen (one way server to client). Das ging zumindest sehr flott.

Folgender Link könnte dir noch hilfreich sein:
http://delphi.about.com/library/weekly/aa122104a.htm

Schreib auch bitte ob das funzt. Bei mir kompiliert es zumindest schon mal

Grüße!
Chris
Chris

Geändert von Photoner (11. Sep 2014 um 10:33 Uhr) Grund: wo bleiben meine Manieren...
  Mit Zitat antworten Zitat
 


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