![]() |
COM Server Struktur (Interfaces zurückgeben?)
Hallo zusammen
Ich beschäftige mich gerade mit COM-Servern und habe nach einigen Recherchen und Experimenten einige Fragen. Zuerst aber einmal was ich machen möchte/schon gemacht habe: Ich habe, in einer DLL implementiert, einen COM-Server (über ROT registriert) den ich für alle Programme zurückgebe (dual, oleautomation; abgel. von IDispatch). Dieser Server soll verschiedene "Geräte" (z.B.: über die serielle Schnittstelle) verwalten und diese meinen Applikationen anbieten. Ich dachte an ein paar Funktionen wie (EnumDevices, GetDeviceList, OpenDevice) wobei EnumDevices im COM-Server eine Liste der Geräte zusammenstellt. Mit GetDeviceList sollte eine Liste von IDs (Strings) zurückgegeben werden (Variant Array??), mit deren Hilfe dann eines der Geräte über OpenDevice geöffnet werden kann. OpenDevice könnte jetzt eine neues COM-Objekt zurückgeben über das ich die Eigenschaften des entspr. Gerätes ansprechen kann. Nun zu meinen Fragen:
|
AW: COM Server Struktur (Interfaces zurückgeben?)
1. Ja, das Konzept ist in Ordnung.
2. IMHO musst du einen Stern (*) davor dahinter setzen 3. k.A. ich bin bei D7 hängen geblieben ;) |
AW: COM Server Struktur (Interfaces zurückgeben?)
Zitat:
Es scheint eher so zu sein, dass nur "manche" Datentypen als "out" definiert werden dürfen. BSTR*, FONTITALIC*, __int64*, ... um einige zu nennen die bereits fix in der Dropdownliste stehen. Nicht funktioniert z.B.: IUNKNOWN*, IPICTURE*, ... und eben auch keines der selber erstellten Objekte (bei mir z.B.: IDevice*)? |
AW: COM Server Struktur (Interfaces zurückgeben?)
Nimm mal 2 Sterne (ich hab grad in mein letztes Projekt bzgl. COM geschaut)!
|
AW: COM Server Struktur (Interfaces zurückgeben?)
Liste der Anhänge anzeigen (Anzahl: 1)
[add: Bild im Anhang]
Das sieht dann im Interface so aus:
Delphi-Quellcode:
[br]
function getAnalogChannelInfo(aIndex: Integer): IAnalogChannelInfo; safecall;
und wird natürlich so erstellt:
Delphi-Quellcode:
result:=CoAnalogChannelInfo.Create;
|
AW: COM Server Struktur (Interfaces zurückgeben?)
Ahhh :thumb: maximalen Dank, zwei Sterndaln sind halt immer besser wie Eines :wink:!
|
AW: COM Server Struktur (Interfaces zurückgeben?)
In C/C++ sind Interfaces keine Zeiger, daher muss man erstmal einen Zeiger erzeugen, damit man mit dem Interface arbeiten kann. Der zweite Zeiger/Stern ist dann "out" für den Parameter.
|
AW: COM Server Struktur (Interfaces zurückgeben?)
dyn. Arrays und (Long)Strings dürfen nicht als OUT definiert werden, da hier die Compilermagic, bzw. das delphieigene Speichermanagement umgangen werden könnte.
Aber diese Typen sollte man eh nicht in einem externen Interface verwenden. Und bei Interfaces/COM-Objekten würde ich es auch nicht machen, da hier die Referenzzählung Probleme bereiten könnte. (Wo das endet, sieht man beim WMI, wo der Result-Parameter als OUT definiert ist, welches ein nettes Speicherleck erzeugt, wenn man da einen "gefüllten" / referenzierenden Variant übergibt. Denn dessen alter Inhalt wird nicht freigegeben, sondern nur die Referenzen überschrieben.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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