COM Interop - Localserver32 registry entries?

  • Thread starter Thread starter Guest
  • Start date Start date
Nicholas,

Regasm does not do what is necessary. Regasm sets up an inproc server for
the COM object. In my situation, I need the applicaiton to access the
process that is already running, which means it needs an out-of-process
server. Thus why I am looking for the keys for localserver32.

Do you know an option in regasm that will set up a localserver32? I could
not find one anywhere in the documentation.

Andrew

Nicholas Paldino said:
Andrew,

You should not be setting these values yourself. Rather, you should let
the REGASM.exe tool do all of the work for you. You should check out part 2
of the COM interop tutorial, which details how to expose your classes in
..NET to COM clients. It is located at (watch for line wrap):

http://msdn.microsoft.com/library/d.../html/vcwlkcominteroppart2cservertutorial.asp

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Andrew S. Giles said:
What registry entries do I need to make a class a localserver32?

Andrew
 
Andrew,

If you need to access items that are already running, then setting it up
as an out of process server isn't going to be something you will be able to
do. Rather, you should register your instance on the running object table,
and have the other process access your component from there (either that, or
have it access it through COM+).


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Andrew S. Giles said:
Nicholas,

Regasm does not do what is necessary. Regasm sets up an inproc server for
the COM object. In my situation, I need the applicaiton to access the
process that is already running, which means it needs an out-of-process
server. Thus why I am looking for the keys for localserver32.

Do you know an option in regasm that will set up a localserver32? I could
not find one anywhere in the documentation.

Andrew

Nicholas Paldino said:
Andrew,

You should not be setting these values yourself. Rather, you should
let
the REGASM.exe tool do all of the work for you. You should check out
part 2
of the COM interop tutorial, which details how to expose your classes in
..NET to COM clients. It is located at (watch for line wrap):

http://msdn.microsoft.com/library/d.../html/vcwlkcominteroppart2cservertutorial.asp

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

message
What registry entries do I need to make a class a localserver32?

Andrew
 
Nicholas,

I found an article that sets up a class and interface as a DCOM server in
C#. I have this already set up in the code, I am just trying to find what
keys are necessary to be in the registry and pointing to what objects to get
it to work.

I have a DLL (MsgEvent) written in C# that I want to be the server. Then I
have a C# application that has a reference to this DLL, it instantiates a
copy of this class and establishes Event handlers for when the exposed
methods are called (the exposed methods wrap the incoming data, and spawn an
event to be processed). There is another process, written in unmanaged C++
that needs to call my COM class to get the data to me. If it looks for a
localserver in the registry and gets the interface of the one already
running, I should be able to send the data across, or that is what I am given
to understand. Which is why I want to set it up as a localserver32, though
this means manually (or via a script that I write) establishing the COM
object as a server.

I did not follow any of the idea for registering my process on the running
object table (is that registering the COM exposed class? and where is the
table? Im a bit out of my element here). Can unmanaged code call this
running object table?

Andrew

Nicholas Paldino said:
Andrew,

If you need to access items that are already running, then setting it up
as an out of process server isn't going to be something you will be able to
do. Rather, you should register your instance on the running object table,
and have the other process access your component from there (either that, or
have it access it through COM+).


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Andrew S. Giles said:
Nicholas,

Regasm does not do what is necessary. Regasm sets up an inproc server for
the COM object. In my situation, I need the applicaiton to access the
process that is already running, which means it needs an out-of-process
server. Thus why I am looking for the keys for localserver32.

Do you know an option in regasm that will set up a localserver32? I could
not find one anywhere in the documentation.

Andrew

Nicholas Paldino said:
Andrew,

You should not be setting these values yourself. Rather, you should
let
the REGASM.exe tool do all of the work for you. You should check out
part 2
of the COM interop tutorial, which details how to expose your classes in
..NET to COM clients. It is located at (watch for line wrap):

http://msdn.microsoft.com/library/d.../html/vcwlkcominteroppart2cservertutorial.asp

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

message
What registry entries do I need to make a class a localserver32?

Andrew
 
Andrew S. Giles said:
Nicholas,

I found an article that sets up a class and interface as a DCOM server in
C#. I have this already set up in the code, I am just trying to find what
keys are necessary to be in the registry and pointing to what objects to
get
it to work.

I have a DLL (MsgEvent) written in C# that I want to be the server. Then
I
have a C# application that has a reference to this DLL, it instantiates a
copy of this class and establishes Event handlers for when the exposed
methods are called (the exposed methods wrap the incoming data, and spawn
an
event to be processed). There is another process, written in unmanaged
C++
that needs to call my COM class to get the data to me. If it looks for a
localserver in the registry and gets the interface of the one already
running, I should be able to send the data across, or that is what I am
given
to understand. Which is why I want to set it up as a localserver32,
though
this means manually (or via a script that I write) establishing the COM
object as a server.

I did not follow any of the idea for registering my process on the running
object table (is that registering the COM exposed class? and where is the
table? Im a bit out of my element here). Can unmanaged code call this
running object table?

You don't have to do this yourself, the CLR will register your classes
exposed as COM objects in the ROT.
Anyway, your scenario is not supported in .NET, you better derive your
classes from EnterpriseServices and host your objects in a COM+ server type
application.

Willy.
 
Willy,

I found the MSDN pages for COM+ Service components, etc. I will endeavor to
get this going as well. Do I have to inherit all of my classes off of
enterprise services, or just those that I need to gain access to from outside
the application? Can I keep these classes in the DLL where they are, and set
up said DLL as the COM+ Services app? Can unmanaged code call this COM+
Serviced object as it would any other com object?

Andrew
 
Andrew,

Yes, only the public classes you want to expose as COM interfaces need to
extend the ServicedComponent class.
You can (should) keep your classes in a DLL and host that DLL in a server
type COM+ application.
All, unmanaged and managed 'COM clients' can access these components as if
they were implemented using non-managed code, you know in COM it's the
interface that rules not the implementation ;-).

Notes:
You have to set some attributes on your interfaces/classes in order to
customize the COM+ environment (server-type, security, pooling etc.).
It's a good idea to have your classes to implement an explicit interface,
that way you can simply refer to the assembly containing the interface
definition when building you managed clients. Unmanaged clients don't have
this requirement, they refer to a typelib generated when registering your
dll with regsvcs.exe.

Willy.
 
Willy,

OK, so I have defined a class and inherited it off of ServicedComponent and
IMessages (my defined interface with 4 methods in it).

I have a C# application already built. Is adding a reference to this DLL a
good or bad thing. this C# applicaiton needs to get the data that is passed
as parameters in the methods of the interface. If I add the DLL here, does
that make this a server type COM+ applicaiton? Or should I make another
applicaiton somewhere to serve as this server?

Additionally, some legacy unmanaged C++ code will need to call this DLL (it
is the source of the data that I need to move from one application (the C++)
to the other (the C#). I presume this attaches just like this class was a
standard COM class, correct?

Im sorry for barraging you with these simple questions, but I am missing
something vital to getting this to work, and I just do not know what it is.

thanks again,

Andrew
 
Back
Top