[C++] COM client maken zonder DLL/TLB

Pagina: 1
Acties:

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:36

Klippy

Still Game

Topicstarter
Even een groot probleem aan de experts hier voorleggen.

Inleiding:
We zijn bezig met een MS Visual C++ applicatie te maken die koppelingen krijgt naar diverse boekhoudpaketten (Unit4 Multivers en AccountView voorlopig).
Deze koppeling wordt gemaakt dmv (D)COM.

De Unit4 koppeling werkt perfect, was relatief simpel te implementeren, alleen met AccountView wordt 't moeilijker.

Het probleem is dat de AccountView reseller geen andere klanten heeft die met VC++ hebben gewerkt en AccountView zelf geen support mag geven omdat we een demolicentie hebben, komt er op neer dat niemand weet hoe het moet. Er hebben 6 studenten naar gekeken, 3 docenten, 2 mensen van AccountView reseller en 2 mensen die in Delphi koppelingen hebben gemaakt.

Probleem:
Is het mogelijk COM koppelingen te maken zonder een TypeLibrary, DLL oid te importeren?

Bij Unit4 hadden we de DLL geïmporteerd en alle COM classes met methods/properties werden aangemaakt.

De AccountView TLB geeft slechts een beperkt aantal methods weer en met verkeerde parameters.
We hebben vanalles geprobeerd, zelf het aanroepen van methods met Invoke/InvokeHelper, maar of er gebeurd niks of het compileert niet eens.

De koppeling kunnen we maken met bijv. CreateDispatch, de naam van de service is bekend.
Maar is het mogelijk om deze pointer te geven aan een generiek COM object?
In VB, Delpi etc is dit mogelijk omdat deze de methods en properties uit het register halen, bij VC++ moet je zover ik zie altijd iets importeren om dit op te halen.

Hoop dat het probleem duidelijk is, sorry voor het lange verhaal, maar we hebben alles geprobeerd.

Volgens AccountView is het trouwens wel mogelijk om te koppelen met VC++, maar is het even lastig uit te vinden :? Maar ze mogen het dus niet zeggen... 8)7
Als jullie ook niks weten wordt het lastig :)

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Even uit mijn blote hoofd, 2 jaar geleden heb ik tijdens een stage met (D)COM gewerkt ook in VC++, maar het kan zijn dat ik het mis heb. Als het goed is met (D)COM, kun je een interface opvragen aan de server, je kan tevens een lijst met interfaces opvragen aan de server. In deze interface, staan de beschikbare functies opgesomd. Hopelijk kan je hier iets mee ;)

Tijdens m'n pauze hier op me werk, zal ik nog ff wat rondzoeken om te kijken of ik nog wat in mijn oude links voor je kan vinden.

-----

Het duurt nog ongeveer 2 uur voor mijn pauze, kijk hier is ff rond:
http://msdn.microsoft.com...sprogreftoplevel_0asl.asp

oeps, vorige link was de verkeerde de bovenstaande is de juiste

[ Voor 43% gewijzigd door 0528973 op 11-12-2003 11:18 ]

Pascal


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:36

Klippy

Still Game

Topicstarter
0528973 schreef op 11 december 2003 @ 11:02:
Even uit mijn blote hoofd, 2 jaar geleden heb ik tijdens een stage met (D)COM gewerkt ook in VC++, maar het kan zijn dat ik het mis heb. Als het goed is met (D)COM, kun je een interface opvragen aan de server, je kan tevens een lijst met interfaces opvragen aan de server. In deze interface, staan de beschikbare functies opgesomd. Hopelijk kan je hier iets mee ;)
Ja daar kan ik wat mee, maar als je weet hoe dat moet kan ik 't ook echt gebruiken ;)

edit:

OK bedankt :)

[ Voor 4% gewijzigd door Klippy op 11-12-2003 11:06 ]

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
LiquidSilver schreef op 11 december 2003 @ 11:05:
[...]


Ja daar kan ik wat mee, maar als je weet hoe dat moet kan ik 't ook echt gebruiken ;)

edit:

OK bedankt :)
kijk hier ff rond:
http://msdn.microsoft.com...sprogreftoplevel_0asl.asp

Pascal


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:36

Klippy

Still Game

Topicstarter
We hebben inmiddels een Delphi stukje gemaakt dat wel werkt.

Hier gebruiken we gewoon een OleVariant en vervolgens tik je de methods er meteen achter.
Delphi:
1
2
3
4
5
6
7
var   AV: OleVariant;

AV := CreateOleObject('xxxx.Application');

AV.login('user','pass');

etc...


Zonder dus iets te importeren, gewoon met OLE objecten.

Is er niet een dergelijke simpele manier voor VC++? :(
Tegenhanger van OleVariant ofzo?

COleVariant doet heel andere dingen...

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Als je in Delphi met OLEVariant werkt om je COM Object aan te spreken doe je dat eigenlijk via IDispatch. Je kan dus ook in VC++ gebruikmaken van IDispatch. Zo te horen heb je dat al geprobeerd met Invoke, maar kennelijk doe je nog iets niet goed. Het feit dat het in Delphi wel werkt bewijst dat het wel kan iig.

Een makkelijkere oplossing is natuurlijk: Ga werken in Delphi! :) of VB

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


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 00:36

Klippy

Still Game

Topicstarter
Ik heb het inderdaad geprobeerd via IDispatch en IDispatchDriver, maar zover ik zie moet je je methods dan aanroepen via bijv. Invoke.
Alleen is dat nogal veel werk en erg omslachtig omdat je CLSID's moet opvragen voor elke method. En zelfs dan is nog niet zeker of het dan werkt.


Als het niet lukt moeten we misschien in Delphi gaan werken, maar dat is eigenlijk niet de bedoeling, de rest van het programma is VC++ en al 1,5 jaar in ontwikkeling.

Ik vind 't gewoon raar/jammer dat het in Delphi zo super simpel is, terwijl je in VC++ niks kan zonder typelib.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Misschien dat je wat kunt achterhalen met de OLE/COM viewer die bij VS zit ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
je kan gebruik maken van de ATL CComDispatchDriver helper. Maakt het je iets makkelijker om via 'late binding' COM objecten aan te roepen dan via de echt ruwe methode.
Pagina: 1