用import语句导入一个dll,生成的包装类智能指针,为什么不再需要QueryInterface?

mmdance 2010-11-04 04:11:45
例如import <msxml.dll>,有了IXMLDOMDocument。
请问,为什么这个接口类的函数就可以直接调用了,不需要我去手动的QueryInterface?
难道说这个智能指针在初始化的时候,就包含了调用QueryInterface的代码?
如果不这样做的话,接口函数的入口地址,又是如何被自动获取的呢?
...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰点青蛙 2011-07-27
  • 打赏
  • 举报
回复
由这个智能指针,如何才能获得组件的包装类
webipstin 2010-11-04
  • 打赏
  • 举报
回复
楼主看我的帖,代码已贴出来了,过程和你的一样,跟一下就明白了、
mmdance 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hdt 的回复:]

import后 会自动生成 tli tlh 文件 ,看看那里面
[/Quote]
我在msxml.tlh和msxml.tli里面,都没有找到QueryInterface
好几个版本都查了,包括msxml4.tlh和msxml4.tli

tli文件里面从头到尾就是N个接口的包装函数,包装成了_com_ptr_t类型的智能指针而已。
还是没有得到解释!
webipstin 2010-11-04
  • 打赏
  • 举报
回复
void CComTestDlg::OnButton1() 
{
CoInitialize(NULL);
IIComputePtr p(CLSID_ICompute);//跟进去

int a = 0;
int b = 1;
p->Add(a,b);
}


	explicit _com_ptr_t(const CLSID& clsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw(_com_error)
: m_pInterface(NULL)
{
HRESULT hr = CreateInstance(clsid, pOuter, dwClsContext);//继续F11进去

if (FAILED(hr) && (hr != E_NOINTERFACE)) {
_com_issue_error(hr);
}
}


	HRESULT CreateInstance(const CLSID& rclsid, IUnknown* pOuter = NULL, DWORD dwClsContext = CLSCTX_ALL) throw()
{
HRESULT hr;

_Release();

if (dwClsContext & (CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)) {
IUnknown* pIUnknown;

hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));//这里创建实例

if (FAILED(hr)) {
return hr;
}

hr = OleRun(pIUnknown);

if (SUCCEEDED(hr)) {//创建成功就查询接口
hr = pIUnknown->QueryInterface(GetIID(), reinterpret_cast<void**>(&m_pInterface));
}

pIUnknown->Release();
}
else {
hr = CoCreateInstance(rclsid, pOuter, dwClsContext, GetIID(), reinterpret_cast<void**>(&m_pInterface));
}

return hr;
}

ameyume 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
调用一次了,剩下的都是获取到的。
[/Quote]
UP
学习
  • 打赏
  • 举报
回复
调用一次了,剩下的都是获取到的。
真相重于对错 2010-11-04
  • 打赏
  • 举报
回复
import后 会自动生成 tli tlh 文件 ,看看那里面

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧