AGB  ·  Datenschutz  ·  Impressum  







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

SafeArray of record

Ein Thema von markus888 · begonnen am 14. Jan 2019 · letzter Beitrag vom 14. Jan 2019
Antwort Antwort
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#1

AW: SafeArray of record

  Alt 14. Jan 2019, 08:54
@TiGü,
danke für die Antwort.

Leider weiß ich jetzt nicht wie ich das umsetzen muss.

Angenommen ich habe folgenden Record:

Code:
TRecSample = packed record
  ID: Integer;
  Text: WideString;
  Value: Byte;
  end;
Wie bekomme ich davon einen verwertbaren GUID, damit der SafeArray korrekt erstellt werden kann?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SafeArray of record

  Alt 14. Jan 2019, 09:15
Oh, ich nahm an, du willst ein Array mit Interface-Instanzen übergeben.
Du willst also stattdessen ein Array mit deinen Record namens TRecSample übergeben?
Schauen wir uns dazu nochmal die Doku an:

Zitat:
pvExtra

the type information of the user-defined type, if you are creating a safe array of user-defined types. If the vt parameter is VT_RECORD, then pvExtra will be a pointer to an IRecordInfo describing the record. If the vt parameter is VT_DISPATCH or VT_UNKNOWN, then pvExtra will contain a pointer to a GUID representing the type of interface being passed to the array.
Ich nehme an, du hat als ersten Parameter den Wert VT_RECORD und nicht VT_DISPATCH or VT_UNKNOWN, richtig?
Dann musst du eine Instanz einer Klasse übergeben, welche IRecordInfo implementiert.
Hier ein bisschen zum Nachlesen:
https://stackoverflow.com/questions/...ype-to-vb6-dll
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#3

AW: SafeArray of record

  Alt 14. Jan 2019, 09:39
@TiGü, danke für deinen Support.


Hat irgendwer eine Idee oder ein Beispiel, wie ich nun diese IRecordInfo für einen Record erstellen kann?

Edit:
Bitte kein workaround.
Ich übergebe die Daten via dll an VBA.
Ich kann von VBA aus ein Safearray mit einem oder mehreren Elementen übergeben und in Delphi dann mit Redim arbeiten.
Hätte aber lieber eine saubere Lösung.

Hinweis:
Ich verwende keine COM DLL, sondern eine Standard DLL, aber vermutlich ist eine Typbibliothek notwendig.

Geändert von markus888 (14. Jan 2019 um 10:25 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SafeArray of record

  Alt 14. Jan 2019, 10:25
Kann ich fragen, was genau das Ziel ist? Ggf. lässt sich ein Datenaustausch zwischen den Modulen auch einfacher bewerkstelligen, wenn du beide Seiten anpassen kannst.
  Mit Zitat antworten Zitat
markus888

Registriert seit: 23. Dez 2018
46 Beiträge
 
#5

AW: SafeArray of record

  Alt 14. Jan 2019, 11:23
Kann ich fragen, was genau das Ziel ist? Ggf. lässt sich ein Datenaustausch zwischen den Modulen auch einfacher bewerkstelligen, wenn du beide Seiten anpassen kannst.
Es geht um den Datenaustausch zwischen VBA und einer Standard Dll.
Ich bin derzeit noch in der Kennenlernphase von Delpi.
Hab vor wenigen Wochen begonnen mich mit dem Thema DLL zu beschäftigen - es geht um die Kommunikation mit VBA.

Das Handling mittels SafeArray ist soweit kein Problem (mehr). Auch das erzeugen bei Standard Datentypen geht ja einfach.
Jetzt geht es mir nur darum, direkt in Delphi ein SafeArray zu erstellen, dass einen Record zurückgibt.
Der Record wird auf beiden Seiten definiert und somit sind die Daten auf beiden Seiten lesbar.
Als workaround übergebe ich derzeit von VBA aus eine Ref auf ein Safearray oder ein OleVariant mit Safearray als Untertyp mit mindestens einem Element.
Dann kann ich falls erforderlich in der DLL per Redim die Anzahl der Elemente anpassen.

Im nächsten Schritt möchte ich mich dann noch mit COM DLL befassen.
  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 09:35 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