Как правильно использовать IOpenServiceManager :: InstallService

Я пытаюсь определить новую поисковую систему IE, но попадаю в неприятности всякий раз, когда я пытаюсь установить сервис.

Я прошел через следующее пример и только поменял имя файлов

upload.xml:

 <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Web Search</ShortName>
<Description>Use Example.com to search the Web.</Description>
<Tags>example web</Tags>
<Contact>[email protected]</Contact>
<Url type="application/rss+xml"template="http://example.com/?q={searchTerms}&amp;pw={startPage?}&amp;format=rss"/>
</OpenSearchDescription>

home.html

<html>
<header>
<link rel="search"type="application/opensearchdescription+xml"href="http://somesite.com/upload.xml"title="Content search" />
</header>
</html>

Ссылки действительны и работают.

C ++:

ATL::CComPtr<IOpenServiceManager> spManager;
if (FAILED(hr = spManager.CoCreateInstance(CLSID_OpenServiceManager)))
return false;

//URL-OF-SERVICE: See http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_elements
ATL::CComPtr<IOpenService> spService;
if (FAILED(hr = spManager->InstallService(L"http://somesite.com/home.html", &spService)))
return 0;

if (FAILED(hr = spService->SetDefault(TRUE, nullptr)))
return 0;

return 1;

Каждый раз, когда я пытаюсь установить услугу, я получаю (hr = 0xc00ce556 / E_INVALIDARG)

0

Решение

ActiveX / COM использует BSTR строки из SysAllocString() семейство функций (завернутый CComBSTR учебный класс). Попробуйте использовать это вместо времени компиляции WCHAR[] буквально через L"...":

BSTR url = SysAllocString(L"http://somesite.com/home.html");
spManager->InstallService(url, &spService)
SysFreeString(url);

CComBSTR url(L"http://somesite.com/home.html");
spManager->InstallService((BSTR)url, &spService)
0

Другие решения


По вопросам рекламы [email protected]