COM中关于返回值为HMODULE 的奇怪有关问题

COM中关于返回值为HMODULE 的奇怪问题
本帖最后由 725137 于 2013-08-09 06:36:00 编辑
我在一个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吗?