没有找到C++的内部接口接口标识符
我有以下课程没有找到C++的内部接口接口标识符,c++,winapi,com,atl,C++,Winapi,Com,Atl,我有以下课程 class SearchCompleteFunction : public ISearchCompletedCallback { public: SearchCompleteFunction() { } ~SearchCompleteFunction() { } virtual HRESULT STDMETHODCALLTYPE Invoke( ISearchJob *search
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);
}
但后来我犯了10多个错误
请帮助我成功编译和测试这个。
我感谢你的帮助 您还需要从CComObjectRootEx继承。基本上,您需要按照ATL教程开始使用ATL COM对象
:
你忘了问问题了。2您的代码段中没有\u InternalQueryInterface。@nada 1完成,对不起,我教过这是显而易见的。2我的代码中没有任何_InternalQueryInterface,当我双击错误时,它会将我带到atlcom.h headerSounds,就像你忘记包含头一样,但我不能确定,因为你的示例本身是不可验证的。这是一个非常基本的问题,当BEGIN _COM_MAP声明丢失时,你会得到这个编译错误。你不能没有它,即使它只生成一个编译错误。添加映射后,它现在会生成更多错误,这一点也不奇怪,编译器现在可以验证您是否正确实现了接口。如果你不告诉我们你看到了什么,很难帮助你。
BEGIN_COM_MAP( SearchCompleteFunction )
COM_INTERFACE_ENTRY( ISearchCompletedCallback )
END_COM_MAP()
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
...