Хорошо, с помощью всех ответов я дошел до этого:
IAutoComplete *pac;
HRESULT hr = CoCreateInstance(CLSID_AutoComplete,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pac));
typedef CComEnum<IEnumString,
&IID_IEnumString,
LPOLESTR,
_Copy<LPOLESTR> > CComEnumString;
CComObject<CComEnumString> *pes;
HRESULT hRes = CComObject<CComEnumString>::CreateInstance(&pes);
// hRes = pes->Init(
IUnknown* pUnk;
hRes = pes->QueryInterface(IID_IEnumString, (void**) &pUnk);
pac->Init(hEdit, pUnk, NULL, NULL);
// maybe we release ?
pUnk->Release();
IAutoComplete2 *pac2;
if (SUCCEEDED(pac->QueryInterface(IID_IAutoComplete2, (LPVOID*)&pac2)))
{
pac2->SetOptions(ACO_AUTOSUGGEST);
pac2->Release();
}
Осталась только одна вещь:
Инициализация объекта CComObject * pes. Предположим, у меня есть такой массив:
std::string myArray[] = { string("abc"), string("foo"), string("muh") };
Теперь я хочу, чтобы эти строки были вставлены в метод pes-> Init (...). Как на самом деле здесь происходит преобразование в LPOLESTR? Метод Init (...) указывает на начало и конец этого массива. Конец должен быть на одну позицию ПОСЛЕ последнего элемента массива, так будет ли здесь myArray [3]? Я просто спрашиваю, потому что я думаю, что это на самом деле за пределами этого массива?
Большое спасибо!