Как преобразовать указатель vc ++ (ex: IListPtr) в std :: list? - PullRequest
0 голосов
/ 23 июня 2009

Может ли какое-либо тело помочь мне в преобразовании указателя интерфейса в переменную списка в vc ++, поскольку я получаю сообщение об ошибке во время преобразования типов

ошибка 2440 "приведение типа": невозможно преобразовать из '_bstr_t' в 'std :: list <_Ty>'

Редактировать: я сделал это так:

C #

List<string> Disp() {
    List<string> li = new List<string>();
    li.Add("Ravi");
    li.Add("Raj");
    Return li;
}

C ++

void main() {
    HRESULT Hr=CoInitilize(NULL);
    ITestPtr p(__uuid("DemoClass");
    std::list l=(std::list)p->Disp();
}

Но странно, что иногда это показывает, что Disp не является членом ITest, а иногда и ошибка преобразования типа. Я убедился, что это только из-за того, когда тип возвращаемого значения List

Ответы [ 2 ]

1 голос
/ 09 ноября 2009

Вы также можете использовать расширение диапазона MFC / ATL Boost

CList<CString> vcList;
std::list<T> stdList;
BOOST_FOREACH( CString s, vcList)
{
    stdList.push_back(s);
}
0 голосов
/ 24 июня 2009

Я ожидал бы, что лучше всего сделать, если только не существует по-настоящему красивого ярлыка, если вручную переместить список CLI и push_back () в std :: list.

В качестве возможного примера того, как это может выглядеть (я не знаю C ++ / CLI)

std::list<T> stdlist;
foreach(T t in CLIlist)
{
    stdlist.push_back(t);
}
...