Toon posts:

[Delphi] Welke COM obj implementeren IEigenInterface

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik wil in mijn delphi applicatie graag weten welke geïnstalleerde COM objecten voldoen aan een bepaalde primary interface. Ik wil dus zeg maar opgeven "ICustomInterface" en dan wil ik weten welke implementaties daarvan zijn.

Hoe krijg ik deze info uit het registry zonder zelf daarin te gaan zitten zoeken. Moet mogelijk zijn denk ik. Delphi doet het zelf namelijk ook wanneer je " Import->ActiveX" doet. Alleen moet ik dan nog je foute interfaces weggooien...

Alvast bedankt he...

mzzls

Edit:
Waarom kan ik de titel achteraf niet even aanpassen? |:(

[ Voor 10% gewijzigd door Verwijderd op 23-05-2005 09:01 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

En wat heb je zelf al geprobeerd? Wat lukte daar niet mee? etc. Zie ook P&W FAQ - De "quickstart".

En maak ff een topicreport aan met je nieuwe titel, dan passen we dat voor je aan :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dit is niet uit het registry te halen. Je zal hiervoor de bijbehorende typelibrary moeten gaan raadplegen. Mag ik vragen waarom je dit zou willen? Misschien is er een makkelijkere manier om je doel te bereiken.

[ Voor 1% gewijzigd door LordLarry op 23-05-2005 11:14 . Reden: typo ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Het doel is om een abstractie te krijgen tussen verschillende lagen in mijn architectuur. Ik wil graag een server hebben die mij zegt welke objecten (andere servers) voldoen aan mijn interface "IPlatformCommunication". Wanneer er een nieuw platform uit komt hoeft iemand alleen IPlatformCommunication in een automation server te implementeren voor dat platform. De rest van de programma's hoeven niet te worden aangepast...

Waarom zou deze info niet uit de registry gehaald kunnen worden? Delphi stelt zelf toch ook de lijst samen? Als ik moet weten welke TypeLib ik moet hebben dan moet ik al weten welke platforms er beschikbaar zijn... Exporteerd een *.tlb of een *.dll server niet de informatie welke Objecten en Interfaces erin zitten?

Ik zou ook een bestand kunnen maken waar elke geinstalleerde platform versie zichzelf in aanmeld. Dan kan ik CreateComObject( "String uit file" ) gebruiken om clients van de interface pointer te voorzien. Maargoed ik d8 dat dit een triviale zaak was en dat COM dit voor mij kon regelen.

  • __fred__
  • Registratie: November 2001
  • Laatst online: 06-05 15:28
Ik geloof niet dat de VCL voorziet in calls om dit voor elkaar te krijgen. Microsoft heeft er echter wel aan gedacht en wel in de vorm van een component category manager. Dit is een interface, wederom geimplementeerd als COM-object, om COM objecten te onderzoeken op basis van categories. Categories hebben GUIDs en op basis van zo'n GUID is het mogelijk om alle COM objecten te vinden die een bepaalde interface implementeren.
Er zijn een hoop C++ voorbeelden te vinden op internet, maar een voorbeeld in delphi is deze:

http://www.techvanguards.com/com/tutorials/plugin.asp

Vooral het stukje over "Component Categories" is interressant dan.

[ Voor 2% gewijzigd door __fred__ op 23-05-2005 13:31 . Reden: typo ]


Verwijderd

Je kunt gewoon run time je TLB's of DLLS gaan laden, en dan kijken wat ze exporteren..

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Die informatie wordt gewoon niet opgeslagen in het registry. Wie zegt dat Delphi alleen het registry gebruikt om de informatie te achterhalen? Een typelibrary bevat die informatie wel, maar zet dat niet in het registry. Delphi haalt een lijst met bekende ActiveX Objecten op en ziet daar welke tlb er bij hoort. Daaruit haalt ie de rest van de informatie.

Nee, dat kan COM niet. Je zou ook bij het registeren van de DLL voor COM ook nog een extra entry maken in het registry zodat je geen los bestandje nodig hebt. Tevens kan je COM objecten ook onder een category onderbrengen waardoor je ze ook zou kunnen vinden. Maar dit zegt niets over de interfaces die ze ondersteunen.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Ik wou net even de oplossing gaan posten zie ik dat hier de link al vermeld staat:

http://www.techvanguards.com/com/tutorials/plugin.asp

Dat is inderdaad DE manier om deze situatie aan te pakken... Beetje overkill dat voorbeeld, maargoed ik vis er wel uit wat ik nodig heb...

Thanx!
Pagina: 1