Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi COM Object und ProgId (https://www.delphipraxis.net/68652-com-object-und-progid.html)

Szin 3. Mai 2006 11:57


COM Object und ProgId
 
Hallo!
Bin Anfänger in Bezug auf das programmieren von COM Objekten und ich suche nun nach einer Möglichkeit eine ProgId zu vergeben. In der Typbibliothek kann ich da nix einstellen, oder?
Grüße,
André

marabu 3. Mai 2006 12:08

Re: COM Object und ProgId
 
Herzlich willkommen in der Delphi-PRAXiS, André.

In einer halbwegs modernen Delphi IDE kannst du im Editor mit dem Tastenkürzel Strg+Umsch+G einen GUID erzeugen.

PS: Ist keine schlechte Idee, wenn du deine Delphi-Version in dein DP-Profil einträgst.

Freundliche Grüße vom marabu

Szin 3. Mai 2006 12:23

Re: COM Object und ProgId
 
Ich will ein wenig weiter ausholen. Ich bin dabei ein Yahoo Widget zu basteln. Das sind kleine Applikationen die auf einer Widgetengine laufen und über JavaScript gesteuert werden. Nun kann man dort auch COM-Objekte verwednen. Dazu gibts die Funktion COM.createObject(progid) die die ProgId des COM objekts haben will.
Nun Hab ich es schon geschafft ein COM Objekt in Delphi zu registrieren, aber es erscheint nicht unter einem Namen im "OLE/COM Object Viewer"
In einem tut für C++ wurde der Name der DllRegisterServer Funktion mit übergeben, diese hat in Delphi allerdings nur einen anderen Parameter...
Wie also gebe ich meinem COM-Objekt einen Namen den die JS-Funktion findet?

P.S. profil ist aktualisiert :-)

marabu 3. Mai 2006 12:49

Re: COM Object und ProgId
 
Es kann sehr gut sein, dass du es nur übersiehst. Leider musst du beim Tool OLEVIEW wissen, wo es steht - du kannst nicht danach suchen. Suchen kannst du aber in der Registry, z.B. nach deinem Delphi Projektnamen. Ich habe soeben eine ActiveXForm registriert und fand diese dann in OLEVIEW im Zweig "All Objects" unter dem ClassName meiner Form "ActiveFormX".

marabu

Szin 3. Mai 2006 12:53

Re: COM Object und ProgId
 
ok, unter "all objects" war es als "MyCOMObject Object" und die ProgId ist mit "ComTest.MyCOMObject" angegeben. Leider stürzt die JWE bei createObject trotzdem ab :-(
Jetzt tapp ich komplett im dunkeln wo das nun dran liegen könnte...

MatthiasR 28. Apr 2008 13:28

Re: COM Object und ProgId
 
Ich krame den Thread mal hervor für eine Frage meinerseits: eine ProgID setzt sich ja immer aus dem Bibliotheksnamen + "." + CoClass des zu verwendenen COM-Objekts zusammen. Um zu überprüfen, ob ein COM-Server bereits im System bekannt ist, verwende ich Shmias Funktion
Delphi-Quellcode:
function ProgIDExists(const ProgID: WideString): Boolean;
var
  tmp: TGUID;
begin
  Result := Succeeded(CLSIDFromProgID(PWideChar(ProgID), tmp));
end;
Anhand von MSXML wollte ich nun mal diese Funktion etwas testen. Ich übergebe als ProgID z.B. "Msxml2.DOMDocument40", weil "DOMDocument40" laut der importierten TLB-Pascal-Datei der Name der CoClass für das Interface IXMLDOMDocument2 ist. Der Aufruf geht jedoch schief, man muss scheinbar statt "Msxml2.DOMDocument40" "Msxml2.DOMDocument.4.0" übergeben. Jetzt frage ich mich natürlich: wieso? Wie kommt diese Diskrepanz zustande? Und woher weiß ich dann überhaupt (ohne Dr. Google befragen zu müssen), welche ProgID ich in Delphi der Funktion ProgIDExists übergeben muss, wenn es schon bei MSXML nicht hinhaut?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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