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();
你要返回HMODULE,可以放到一个参数,OUT参数。
[解决办法]