0
Как this thread, но когда я передать строку в метод, строка в классе ком не так, вот код:Как передать объект класса ATL COM, как к COM В параметре
ком сервер - Com.idl :
interface IParamClass : IUnknown
{
[] HRESULT SetString([in] BSTR str);
}
interface IMyClass : IUnknown
{
[] HRESULT PassComClassAsParam([in] IParamClass* parm);
}
ParamClass.cpp
class ATL_NO_VTABLE CParamClass : ...
{
...
public:
BSTR m_str;
STDMETHOD(SetString)(BSTR str);
};
STDMETHODIMP CParamClass::SetString(BSTR str)
{
m_str = str;
return S_OK;
}
MyClass.cpp:
STDMETHODIMP CMyClass::PassComClassAsParam(IParamClass* param)
{
CParamClass *obj = (CParamClass*)param;
BSTR str = obj->m_str; //debugging here, is wrong string
...
}
C# Клиент:
MyClass myobj = new MyClass();
ParamClass param = new ParamClass();
param.SetString("Test String!");
myobj.PassComClassAsParam(param);
Спасибо! Это сработало! – Kamil
Это будет работать только в том случае, если нет сортировки, иначе указатель 'IParamClass * 'может указывать на прокси-сервер, а затем приведение будет незаконным. – sharptooth
@sharptooth есть ли какой-либо справочник по времени жизни объекта com? – Kamil