hi,
I have a native c++ dll and two classes:
classA{
void setNumber(int number);
int getNumber();
}
classB{
void setclassA(classA);
classA getclassA();
}
I have an ATL dll that wraps the native C++ dll and two interfaces: InterfaceForClassA , InterfaceForClassB .
InterfaceForClassA :
STDMETHODIMP CInterfaceForClassA::createClassAObject(void)
{
ClassA* Aobject = new ClassA();
return S_OK;
}
STDMETHODIMP CInterfaceForClassA::setNumberInClassA(SHORT pVal)
{
if(Aobject != NULL)
Aobject->setNumber(pVal);
return S_OK;
}
STDMETHODIMP CInterfaceForClassA::getNumberInClassA(SHORT* pVal)
{
if(Aobject != NULL)
*pVal = Aobject->getNumber();
return S_OK;
}
STDMETHODIMP CInterfaceForClassA::getClassA(VARIANT** pVal)
{
*pVal = (VARIANT*)Aobject;
return S_OK;
}
STDMETHODIMP CInterfaceForClassA::putClassA(VARIANT* newVal)
{
Aobject = (ClassA*)newVal;
return S_OK;
}
InterfaceForClassB :
STDMETHODIMP CInterfaceForClassB::setClassA(IInterfaceForClassA * val)
{
ClassB* BObject = new ClassB();
ClassA* objA = new ClassA();
val->getClassA((VARIANT**)&objA);
BObject->putClassA(objA);
return S_OK;
}
STDMETHODIMP CInterfaceForClassB::getClassA(IInterfaceForClassA ** returnVal)
{
ClassA* objA = new ClassA();
IInterfaceForClassA *pY;
objA = BObject->getClassA();
pY->putClassA((VARIANT*)&objA);
*returnVal = pY;
return S_OK;
}
and finally i have a c# project that includes that ATL dll, in the c# project i call ATL dll classes:
InterfaceForClassAClass classAInt = new InterfaceForClassAClass();
classAInt.createClassAObject();
classAInt.setNumberInClassA(5);
InterfaceForClassBClass classBInt = new InterfaceForClassBClass();
classBInt.setClassA(classAInt);
classBInt.getClassA();
it gives the 'System.ExecutionEngineException' at the line "classBInt.getClassA();" .
Can you help me please?