0
像this thread,但是当我传递一个字符串到方法,在COM类的字符串是错误的,这里是代码:如何通过ATL COM类对象作为paramater到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