首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-09-05 
COM中关于返回值为HMODULE 的奇怪问题本帖最后由 725137 于 2013-08-09 06:36:00 编辑我在一个COM对象中定

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吗?



你要返回HMODULE,可以放到一个参数,OUT参数。
[解决办法]

引用:
Quote: 引用:

COM接口返回值不都应该是HRESULT吗?

你要返回HMODULE,可以放到一个参数,OUT参数。

我那又不是com接口啊。我是一个普通的方法而以。上面说了,用接口的方式,接口方法不能写HMODULE的。我定义成long*后。返回也不正常。


嗯,搞定就好了。


COM方法,如果返回这些值,就用LONG类型就OK了。

热点排行