![]() |
COM + (un)typisierte Zeiger
hi
ist es möglich mit COM-Objekte typisierte Zeiger zu verwenden? Wenn ja, wie geht das (auch mit type lib (TLB)) ? Geht das in der Steigerung auch mit untypisierten Zeigern (+ Größenangabe)? Ist es überhaupt möglich WinAPI Handles (sind alle Prozessbezogen, können aber mit DuplicateHandle übertragen werden!) zu verwenden? thx |
Re: COM + (un)typisierte Zeiger
24h sind um, daher
** ping ** |
Re: COM + (un)typisierte Zeiger
Hallo,
auch nach mehrmaligem Lesen deines Beitrags bin ich nicht sicher, ob ich dich verstehe. Typisierte Zeiger in COM-Objekten? Klar: PInteger, PChar, ... TLB? Brauchst du nur für early binding ... Untypisierte Zeiger mit Größenangabe? Was hast du da vor? Freundliche Grüße |
Re: COM + (un)typisierte Zeiger
Naja ich dachte eigentlich, dass ich ein Ergebnis zurückgeliefert von eine C-Funktion, in ein COM-Objekt verwandeln könnte.
Als einfaches Beispiel liefert ConvertStringSidToSidW einen Zeiger auf eine TSID Struktur. Kann nun eine Methode in einem COM-Objekt, diese Datestruktur empfangen, um das COM-Objekt zu initialisieren? |
Re: COM + (un)typisierte Zeiger
Da ein COM-Object häufig in einer DLL erzeugt wird und diese DLL wiederum oft in C geschrieben wurde, kannst du also davon ausgehen, dass eine C-Library dir ein Interface zurückgeben kann. Ich denke, da müsste es entsprechende Kapitel zur ActiveX-Erstellung in deinem C-Handbuch geben.
Deine letzte Frage ist für mich schon wieder verwirrend, da ich mich mit deinem Spezialgebiet so gut wie nie beschäftige. Ich weiß gar nicht von welchem COM-Object du schreibst - es scheint ein bestimmtes zu sein. |
Re: COM + (un)typisierte Zeiger
Beispiel:
Ich will ein eigenes COM-Objekt erstellen. Das heißt z.B. TCOMSid . Es verwaltet eine SID (Name, Autoritäten, usw). Ich frage mich, ob es eine Methode in einem COM-Objekt gegeben kann, die wie folgt aussieht:
Delphi-Quellcode:
Diese Methode holt die benötigten Daten aus der SID und initialisiert Eigenschaften des COM-Objekts.
procedure InitSid(const Sid : PSid); safecall;
Die COM-Objekte verbleiben in der Sprache Delphi. |
Re: COM + (un)typisierte Zeiger
Wenn du das COM-Object mit D7 entwerfen würdest, dann würdest du es COMSid nennen, ihm vielleicht ein Interface ICOMSid verpassen un diesem eine Methode Init. Der Methode ordnest du einen Parameter zu, den Typ machst du vorher bekannt und wählst ihn dann im TLB-Editor als VAR-Parameter aus. Warum willst du das mit C machen?
|
Re: COM + (un)typisierte Zeiger
Wie mache ich den Typ bekannt?
|
Re: COM + (un)typisierte Zeiger
Natürlich weißt du, dass du einen Typ per type-declaration bekannt machst!
Ich habe mal im PSDK nachgesehen, was es mit PSID auf sich hat und jetzt ahne ich, was dein Problem ist: variable length structure - kann das sein? Solche Strukturen benötigen eine Größenangabe oder einen Delimiter. Mit SID solltest du dich aber besser auskennen als ich. |
Re: COM + (un)typisierte Zeiger
Zitat:
Zitat:
|
Re: COM + (un)typisierte Zeiger
Ist nicht der ToolButton (im TLB Editor) für die Record-Deklaration das was du brauchst?
So habe ich es versucht und der Typ wird dann auch in der Auswahlliste für Parametertypen angeboten. Probier doch mal. |
Re: COM + (un)typisierte Zeiger
Hier ist der Record.
Code:
Wie kann ich sowas in IDL definieren?
typedef struct _SID {
BYTE Revision; BYTE SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; DWORD SubAuthority[ANYSIZE_ARRAY]; } SID, *PSID; |
Re: COM + (un)typisierte Zeiger
Ja, das ist eine harte Nuss. Ich würde versuchen den Record in einem OleVariant auf die Reise zu schicken. Immerhin geht es ja nur darum, dass der variabel lange Record irgendwie das COM-Marshalling überlebt, oder?
EDIT: Kaum habe ich das geschrieben, da erinnere ich mich an diesen Beitrag: ![]() |
Re: COM + (un)typisierte Zeiger
Ok, Danke für die Info.
Aber das bedeutet wohl, dass für jede Clientanwendung, so eine Unwandlung gemacht werden muss. D.h. zum Beispiel, dass ich eine DLL schreibe, die das ermöglicht, damit nicht in X-verschiedenen Sprachen diese Umwandlung gemacht werden muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 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