Home | Shorter Path | About Me
Home
About Me
RSS Feed

Planners (you know you want it)

Archive

2004

01

02

03

04

05

06

07

08

09

10

11

12

 

2005

01

02

03

04

05

06

07

08

09

10

11

12

 

2006

01

02

03

04

05

06

07

08

09

10

11

12


Blogroll
 
Borland
Allen Bauer
Anders Ohlsson
Chris Bensen
Malcolm Groves
Michael Swindell
Steve Trefethen
Borland Blogs
TeamB
TeamB Blog Server
Nick Hodges
Other
Algorithms for the Masses
Brad Abrams
Chris Brumme
Chris Pratley
Dan Miser
Don Box
Falafel Flogs
iunknown.com
Joel on Software
Matt Pietrek
Suzanne Cook
The Daily WTF
The New Old Thing
Wintellog

Selecting a COM+ server at run time

Monday, July 26, 2004 05:58 PM

I just spent a couple of hours trying to figure this out. A customer of mine has a COM+ object (plain Win32 code, written in Delphi 5). They've started using Delphi 8, and needed to access the old objects from their .NET applications. It's easy enough when the object runs locally, or when a proxy is registered for the object. The problem was trying to select the server name at run time.

In Win32, this is easy: the CoCreateInstanceEx function lets you specify the server name. Searching MSDN Library and the web, however, only gave me information about using Marshal.BindToMoniker to connect to COM+ queued components. Unfortunately, the component in question was not queued.

Of course, the answer turned out to be painfully (literally) simple:

var
  Obj: IMyInterface;
begin
  Obj := Activator.CreateInstance(
    &Type.GetTypeFromProgID('MyDLL.MyInterface', 'ServerName', True));

  Obj.DoSomething;
end;

You still have to register the interface on the client, but the actual instance will run on the selected server.

|

Copyright 2004 Yorai Aminov