AGB  ·  Datenschutz  ·  Impressum  







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

COM-Server registrieren

Ein Thema von Luckie · begonnen am 17. Okt 2007 · letzter Beitrag vom 19. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

COM-Server registrieren

  Alt 17. Okt 2007, 09:48
Ich beschäftige mich jetzt seit ein paar Tagen mit COM. Ich weiß mittlerweile, was COM ist, wie komm funktioniert (nun ja fast) und wie man mit Delphi einen COM-Server erstellt.

Bleibt nur noch eine Frage, warum müssen COM-Server im System registriert werden?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: COM-Server registrieren

  Alt 17. Okt 2007, 09:53
COM-Server spricht man ja mit deren GUID an.

Die 'Registrierung' ist im Prinzip nichts anderes, als dass in der Registry hinterlegt wird, welche GUID zu welchem COM-Objekt gehört, wo das Binary liegt und noch ein paar Informationen zu Einsprungspunkten in der jeweiligen DLL.

Im Prinzip alles, was das System braucht, um bei einer Anfrage nach dem Objekt dieses auch liefern zu können.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: COM-Server registrieren

  Alt 17. Okt 2007, 17:29
Jo das Problem liegt ja in der Verknüpfung zwischen GUID und Ablageort der DLL oder der EXE.
Man unterscheider mit der Registrierung auch, ob es ein Inproc- oder ein OutprocServer ist. Zudem werden dort der TypMarshaller festgelegt,
der für den Transport der Parameter verantwortlich ist (nur OutProcServer)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: COM-Server registrieren

  Alt 19. Okt 2007, 16:16
Ich habe das jetzt so ausgedrückt:
Zitat:
Ortsunabhängigkeit
COM ist ortsunabhängig, d. h. dass die einzelnen COM-Komponenten an einer zentralen Stelle (Registry) angemeldet werden und so der Zugriff auf die Komponenten unabhängig von ihrem eigentlichen Ort erfolgen kann. Dies bezeichnet man auch als Ortstransparenz\footnote{Ortstransparenz bedeutet in der EDV, dass der Benutzer einer verteilten Anwendung den tatsächlichen Ort des angefragten Objektes oder der angefragten Ressource nicht kennen muss.}. Dies ist auch der Grund, warum COM--Server registriert werden müssen. Da man COM--Server über deren GUID anspricht, muss an einem zentralen Ort hinterlegt werden welche GUID zu welchem COM--Objekt gehört und in welcher DLL sich das COM--Objekt befindet -- deswegen muss ein COM--Client nicht wissen, wo sich die DLL mit dem COM--Server befindet. Dies erledigt alles Windows für ihn. Diese Informationen werden in der Registry hinterlegt. Zusätzlich werden dort Informationen zu dem COM--Server abgelegt, wie zum Beispiel der Einsprungspunkt der DLL, ob es sich um einen in--process Server oder Local Server handelt und es wird der Typmarshaller festgelegt, wenn es sich um einen Local Server handelt.
Ist das soweit richtig und kann man eventuell noch mehr dazu sagen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: COM-Server registrieren

  Alt 19. Okt 2007, 17:25
Zitat:
COM ist ortsunabhängig, ..
Das kann man sogar soweit führen, dass man COM Objekte aus anderen Windowssystemen über das Netzwerk verwendet.


Zitat:
und es wird der Typmarshaller festgelegt, wenn es sich um einen Local Server handelt.
Ich dachte eigentlich, dass ein Marshall nur für OutOfProcess Server notwendig sind. Weil die Kommunikation über ein externes Protokoll passiert. D.h. Parameterwerte müssen als Bytestream gespeichert und auf der anderen Seite interpretiert werden.
Für InProcessServer ist das nicht notwendig, weil der Aufrufer und COM denselben Speicher sich teilen, ja sogar derselbe Process sind. Es ist also ein ganz normaler Stackwind und Stackunwind Aufruf.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: COM-Server registrieren

  Alt 19. Okt 2007, 18:20
Local Server sind das, was du als out-process Server bezeichnest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: COM-Server registrieren

  Alt 19. Okt 2007, 19:58
Zitat von Dezipaitor:
Ich dachte eigentlich, dass ein Marshall nur für OutOfProcess Server notwendig sind. Weil die Kommunikation über ein externes Protokoll passiert. D.h. Parameterwerte müssen als Bytestream gespeichert und auf der anderen Seite interpretiert werden.
Für InProcessServer ist das nicht notwendig, weil der Aufrufer und COM denselben Speicher sich teilen, ja sogar derselbe Process sind. Es ist also ein ganz normaler Stackwind und Stackunwind Aufruf.
Man braucht dann einen (eigenen) Marschaller wenn man Datentypen verwendet die der Standard-Marschaller von Windows nicht von sich aus behandeln kann. Bei Visual C++ ist es üblich eigenen eigenen Marschaller zu basteln, bei Delphi kann man AFAIK keinen eigenen entwickeln (außer mit sehr Low-Level API-Aufrufen).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#8

Re: COM-Server registrieren

  Alt 19. Okt 2007, 20:13
Zitat von Bernhard Geyer:
Man braucht dann einen (eigenen) Marschaller wenn man Datentypen verwendet die der Standard-Marschaller von Windows nicht von sich aus behandeln kann. Bei Visual C++ ist es üblich eigenen eigenen Marschaller zu basteln, bei Delphi kann man AFAIK keinen eigenen entwickeln (außer mit sehr Low-Level API-Aufrufen).
Das schreit ja schon danach, dass jemand eine Kompo dafür entwickelt, oder nicht?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: COM-Server registrieren

  Alt 19. Okt 2007, 21:00
Zitat von Dezipaitor:
Das schreit ja schon danach, dass jemand eine Kompo dafür entwickelt, oder nicht?
Schreien halte ich für übertrieben, da man mit den Standard-Marshaller schon sehr weit kommt. Und in Zeiten von WDSL und SOAP sowie anderen guten reinen Delphi-Mitteltier Lösungen ist denke ich der Markt nicht sehr groß. Und nach MS ist ja COM auf dem Absteigenden Ast. Unter Vista sind ja alle neuen API reine C-Kompatiblen DLL-Schnittstellen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: COM-Server registrieren

  Alt 19. Okt 2007, 21:10
Im Zweifelsfall streamt (serialisiert) man seine Klassen in einen Memorystream, bupselt den in ein Variant (Array Of Byte) und bläst ihn über das Netz. Auf der anderen Seite wieder in einen Stream und dann auspacken.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz