[Mono-dev] Creating Managed COM objects from C++ (on linux).
Bill Holmes
billholmes54 at gmail.com
Fri Dec 19 17:07:53 EST 2008
We have dealt with this by registering a global class factory method
(that is implemented in C#) with native C++ code.
I assume you are hosting the mono runtime?
Take a look at the poor code example below and see if that gives you the idea.
-bill
/* C++ code */
void cppMain ()
{
// Init Mono Runtme
// Call managed InitManagedCOMFactory
IUnknown* pObj;
ManagedCOMFactoryCreateObject (CLSID_MyObj, &pObj);
IFoo* pFoo;
pObj->QueryInterface (IID_IFoo, (void**)&pFoo);
}
uint (*ManagedCOMFactoryCreateObject) (GUID*, IUnknown**);
void RegsterManagedCOMFactoryCreateObject (void* ptr)
{
ManagedCOMFactoryCreateObject = ptr;
}
/* C# code */
void InitManagedCOMFactory ()
{
RegsterManagedCOMFactoryCreateObject (ManagedCOMFactoryCreateObject);
}
uint ManagedCOMFactoryCreateObject (guid g, [MarshalAs (IUnknown)] out
object retObj)
{
if (g == myGuid)
retObj = new MyObject ();
}
More information about the Mono-devel-list
mailing list