Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: COM Object : Binär bzw. Struktur übergeben

  Alt 3. Nov 2009, 10:16
Wie du die übergibst hängt ganz von der Dokumentation des jeweiligen Objektes zusammen. Das kann man nicht allgemein formulieren.

Aber vielleicht ist folgendes gemeint:
Delphi-Quellcode:
function SafeArray(const Structure; StructureSize:Integer):PSafeArray;
var Data:Pointer;
    PSA:PSafeArray;
begin
  PSA:=SafeArrayCreateVector(VT_I1,0,StructureSize); //SafeArray erstellen (Elementgröße ist Byte =VT_I1 und Länge StructureSize)
  if not assigned(PSA) then
    raise Exception.create('SafeArrayCreateVector')
  else
  try
    if SafeArrayAccessData(PSA,Data)<>s_ok then //Zeiger auf den zusammenhängenden Speicherblock des Array bekommen
      raise Exception.create('SafeArrayAccessData')
    else
    try

      move(Structure,Data^,StructureSize); //Daten (Struktur) in Array kopieren

    finally
      if SafeArrayUnaccessData(psa)<>s_ok then
        raise Exception.create('SafeArrayUnAccessData'); //Zugriff auf Array wieder freigeben
    end;
  except
    SafeArrayDestroy(PSA); //bei Fehler Array löschen
    Raise;
  end;
  result:=PSA;
end;

Damit kann man bspw folgende zusammenhängende Daten speichern:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type TX=record
       i:Integer;
       s:string[5];
     end;
var x:TX;
    psa:PSafeArray;
begin
  x.i:=5;
  x.s:='Hallo';
  psa:=getSafeArray(x,sizeof(x));

  //hier psa an Obejkt übergeben

  safearraydestroy(psa); //und je nach Dokumentation selber wieder freigeben
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat