S
Saad
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.
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.