c++ - C++ ATL | _InternalQueryInterface 标识符未找到
问题描述
我有以下课程
class SearchCompleteFunction : public ISearchCompletedCallback
{
public:
SearchCompleteFunction()
{ }
~SearchCompleteFunction()
{ }
virtual HRESULT STDMETHODCALLTYPE Invoke( ISearchJob *searchJob, ISearchCompletedCallbackArgs *callbackArgs )
{
std::cout << "Invoked" << std::endl;
return S_OK;
}
};
// Now I am trying to BeginSearch
{
CComObject<SearchCompleteFunction>* searchCompleteFunc = nullptr;
HRESULT hres = CComObject<SearchCompleteFunction>::CreateInstance( &searchCompleteFunc );
CComPtr<ISearchJob> searchJob = nullptr;
hr = ptrUpdateSearcher->BeginSearch(_bstr_t(bstrCriteria.c_str()), searchCompleteFunc, CComVariant(L"Scanning"), &searchJob);
}
当我编译这段代码时,我得到 '_InternalQueryInterface': identifier not found。
我也用过
BEGIN_COM_MAP( SearchCompleteFunction )
COM_INTERFACE_ENTRY( ISearchCompletedCallback )
END_COM_MAP()
但后来我得到了 10 多个错误。
请帮助我成功编译和测试它。我感谢您的帮助!
解决方案
你也需要继承自CComObjectRootEx
。基本上你需要按照 ATL 教程开始使用 ATL COM 对象。
class ATL_NO_VTABLE CFoo :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFoo, &CLSID_Foo>,
public IDispatchImpl<IFoo, &IID_IFoo, &LIBID_TESTLib>
{
public:
CFoo()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_FOO)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CFoo)
COM_INTERFACE_ENTRY(IFoo)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IFoo
...
推荐阅读
- r - 将嵌套的json文件转换为R中的Dataframe
- sql - sql编程所有类型
- php - 为什么数据不能发布到数据库?
- x86 - 为什么在启用分页之前切换到保护模式后,地址范围 0xC0000000 ~ 0xFFFFFFFF 总是给出 0x00 或 0xFF?
- javascript - 使用 javascript 在菜单中突出显示当前页面
- python - 指针、引用、标识符、变量有什么区别
- node.js - 使用 express 和 nodejs 从本地主机获取图像到本地主机
- docker - docker安装版本?适用于启用 hyper v 的 PC
- node.js - 单击提交时无法检查空或空
- html - 将鼠标悬停在项目上时删除边框