Hi,
I have an unmanged interface which i have exposed through COM to C#. I
have been able to implement the interface in one of the C# classes
(say Class1) as well.
But now what i want to do is that i need to pass the reference of the
object of Class1 to this COM wrapper...and then from inside that
wrapper i want to call one of the func of that class1.
What i did roughly is something like this:
/
*********************************************************************************************************/
//this is the interface that was exposed
// IExportedClassWrapper
[
object,
uuid("7DD5445A-A8AE-471C-A065-629C3A004362"),
dual, helpstring("IExportedClassWrapper Interface"),
pointer_default(unique)
]
__interface IExportedClassWrapper : IDispatch
{
[id(4), helpstring("method CheckInterfaceOne")] HRESULT
CheckInterfaceOne(IDispatch* a, [out,retval] LONG* RetParam);
};
/
*********************************************************************************************************/
/
*********************************************************************************************************/
STDMETHODIMP CExportedClassWrapper::CheckInterfaceOne(IDispatch* a,
LONG* RetParam)
{
// TODO: Add your implementation code here
IExportedClassWrapper* objI = static_cast<IExportedClassWrapper*>(a);
//THIS IS THE LINE ON WHICH I'M GETTING EXCEPTION
//SAYING THAT THE CALLING CONVENTION IS NOT RIGHT....
objI->MethodSampleReturn(RetParam);
return S_OK;
}
/
*********************************************************************************************************/
/
*********************************************************************************************************/
//then the C# class implemented it like
public class Class1 : SampleCISCOATLCOMWrapper.IExportedClassWrapper
{
public Class1()
{
//
// TODO: Add constructor logic here
//
}
#region IExportedClassWrapper Members
public int CheckInterfaceOne(object a)
{
// TODO: Add Class1.CheckInterfaceOne implementation
//THIS IS THE METHOD
THAT I WANT TO CALL FROM COM
return 20;
}
#endregion
}
/
*********************************************************************************************************/
//and then i used this interface like this in C#
SampleCISCOATLCOMWrapper.CExportedClassWrapperClass objCl = new
SampleCISCOATLCOMWrapper.CExportedClassWrapperClass();
Class1 objClass = new Class1();
int nRet = objCl.CheckInterfaceOne(objClass);
/
*********************************************************************************************************/
this whole thing is sort of circular....:)
I think you got an idea of what i want to do...
Is it possible? :)
And how?
Note: I dont have much experience in COM ...
Thanks,
Saad.
Shivanand Mitkari - 19 Mar 2008 07:57 GMT
Hi ,
Calling a function of outer object is possible in COM.
You can pass the reference of Outer object in second parameter of
CoCreateInstance and u can call the function in Outer Object.
Please refer to http://msdn2.microsoft.com/en-us/library/ms886232.aspx
Thanks,
Shivanand
> Hi,
>
[quoted text clipped - 90 lines]
> Thanks,
> Saad.