Al eerder is er een topic geweest over het aanroepen van functies op een DCOM server. De theorie is me duidelijk, maar de praktijk blijkt lastig. Het is me al gelukt om functies aan de IAppServer interface van mijn DCOM server toe te voegen met de type library editor. Die functies waren ook nog aan te roepen op de client, maar niet probleemloos.
Ten eerste lukt het me niet om aan een functie parameters met een [in, out] of [out] specifier toe te voegen, ongeacht het parametertype. De type library editor begint dan steevast te klagen dat hij alleen [out] parameters van een pointer type toestaat in een automation server. Dat zegt me weinig.
Ten tweede krijg ik een access violation op de client als een een functie op de server aanroep die een WideString (in de type library een BSTR) als functieresultaat retourneert. Functies die een OleEnum retourneren werken probleemloos. En ook [in] parameters van het type WideString worden probleemloos doorgegeven. Wat gaat hier mis?
Ten derde lukt het me niet om de DCOM server te benaderen (gebruikmakend van TDCOMConnection.AppServer) via early binding, want de compiler ligt dwars. Alleen via de dispinterface lukt het me:
with IMijnAppServerDisp(IDispatch(DCOMConnection.AppServer) do …
Hoe bewerkstellig ik early binding via DCOMConnection.AppServer?
Kan iemand me op weg helpen? Ik werk trouwens met Delphi 7 Enterprise.
Ten eerste lukt het me niet om aan een functie parameters met een [in, out] of [out] specifier toe te voegen, ongeacht het parametertype. De type library editor begint dan steevast te klagen dat hij alleen [out] parameters van een pointer type toestaat in een automation server. Dat zegt me weinig.
Ten tweede krijg ik een access violation op de client als een een functie op de server aanroep die een WideString (in de type library een BSTR) als functieresultaat retourneert. Functies die een OleEnum retourneren werken probleemloos. En ook [in] parameters van het type WideString worden probleemloos doorgegeven. Wat gaat hier mis?
Ten derde lukt het me niet om de DCOM server te benaderen (gebruikmakend van TDCOMConnection.AppServer) via early binding, want de compiler ligt dwars. Alleen via de dispinterface lukt het me:
with IMijnAppServerDisp(IDispatch(DCOMConnection.AppServer) do …
Hoe bewerkstellig ik early binding via DCOMConnection.AppServer?
Kan iemand me op weg helpen? Ik werk trouwens met Delphi 7 Enterprise.
Een goede grap mag vrienden kosten.