COM中关于返回值为HMODULE 的奇怪有关问题
COM中关于返回值为HMODULE 的奇怪问题
我在一个COM对象中定义了一个变量两个普通方法,打算用这个com对象来进行线程之间的参数传递。
现在的问题是如果我在外面调用
如果我采用标准接口的方法,定义pug和get方法的话,在外面用指针的方法得到值。返回的始值是值对象。
比如我定义成一个long*变量,然后传入long*指针,[out,retval]得到的最终值变成了long.而传入的那个指针还是原来的值。
------解决方案--------------------
COM接口返回值不都应该是HRESULT吗?
我在一个COM对象中定义了一个变量两个普通方法,打算用这个com对象来进行线程之间的参数传递。
class ATL_NO_VTABLE CDataObj :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDataObj, &CLSID_DataObj>,
public IDispatchImpl<IDataObj, &IID_IDataObj, &LIBID_NEWHELLO5Lib>
{
public:
CDataObj()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_DATAOBJ)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CDataObj)
COM_INTERFACE_ENTRY(IDataObj)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IDataObj
public:
HMODULE GetHis();
void SetHis(HMODULE value);
private:
HMODULE his;
int requestId;
BSTR parameters;
BSTR methodName;
};
void CDataObj::SetHis(HMODULE value)
{
his = value;
//以下代码可以正常执行
typedef int (*getPosFun)();
getPosFun getPos = (getPosFun)GetProcAddress(his,"getPos");
getPos();
}
HMODULE CDataObj::GetHis() //返回指针的话改成HMODULE * CDataObj::GetHis()
{
typedef int (*getPosFun)();
getPosFun getPos = (getPosFun)GetProcAddress(his,"getPos");
getPos();
//以上代码也可以正常执行,如果这里返回一个指针 return &(this->his)也是不行的.
//外面也拿不到
return this->his;
}
现在的问题是如果我在外面调用
//以下代码就不能正常执行了,返回得到的HMODULE变得不正确了,为何????HMODULE要怎么样返回?
HMODULE h = obj->GetHis();
typedef int (*getPosFun)();
getPosFun getPos = (getPosFun)GetProcAddress(his,"getPos");
getPos();
如果我采用标准接口的方法,定义pug和get方法的话,在外面用指针的方法得到值。返回的始值是值对象。
比如我定义成一个long*变量,然后传入long*指针,[out,retval]得到的最终值变成了long.而传入的那个指针还是原来的值。
------解决方案--------------------
COM接口返回值不都应该是HRESULT吗?