Problems getting access to a STA object from another process

1

I have been trying something which may turn to be impossible in the end. It's been a long while since I've been in COM land.

Consider two apps and a COM STA DLL. First app loads COM STA DLL as a plugin and this DLL tries to register itself "globally" so that the second app sees it. Something like GetObject("Excel.Application").

I have tried two approaches (which may turn to be the same thing).

Approach 1: I have tried using CoRegisterClassObject to register my STA instance of an object. This call succeeds with S_OK. But if I try to GetActiveObject using the same CLSID immediately after CoRegisterClassObject, I get MK_E_UNAVAILABLE - 0x800401e3.

Is GetActiveObject the wrong API to call? If not, why would it fail?

Approach 2: I have also tried using GetRunningObjectTable, IRunningObjectTable:Register and CreateClassMoniker but when trying to get to the object from ROT in a second app, I am faced with another failure.

My STA DLL is properly registered and uses typelib for marshaling (which is also registered).

Am I missing something or is what I am trying to do not possible at all? If latter, are there any simple alternatives for me?

c++
com
marshalling
atl
asked on Stack Overflow Feb 7, 2012 by wpfwannabe

1 Answer

1

It seems when you want to use GetActiveObject your friends are RegisterActiveObject and RevokeActiveObject. I was totally off. It works perfectly now! I hope this helps someone.

answered on Stack Overflow Feb 7, 2012 by wpfwannabe

User contributions licensed under CC BY-SA 3.0