Добавление нового элемента в listBox
В программе есть структура вида:
typedef struct Day {
int ID;
char *Planet;
char *Chas;
}Day;
потом идёт инициализация...: Day.Planet="Mars" и т.д.
В итоге мне надо загнать это всё в ListBox... т.е. listBox->Items->Add(Day.Planet);
Он естественно ругается и пишет, 4то нельзя преобразовать char* в System::Object...
Вопрос... как можно преобразовать???
Ты пытаешься "прикрутить" неуправляемую строку к полностью управляемому объекту System::Windows::Forms::ListBox.
Сам на CLI не пишу, но кажется нужно использовать boxing (т.е. unmanaged-типы оборачивать в managed обертку).
Прикладываю статью, которая почему-то исчесзла с сайта RSDN. В ней ты найдёшь то, что тебе нужно... по крайней мере основы.
В целом, думается, что использование данной структуры в том виде как ты описал её не оправдано, ибо это можно сразу писать с использованием managed-классов, а там уже и DataBindings и т.д. и т.п. ;)
Ты пытаешься "прикрутить" неуправляемую строку к полностью управляемому объекту System::Windows::Forms::ListBox.
Сам на CLI не пишу, но кажется нужно использовать boxing (т.е. unmanaged-типы оборачивать в managed обертку).
Прикладываю статью, которая почему-то исчесзла с сайта RSDN. В ней ты найдёшь то, что тебе нужно... по крайней мере основы.
В целом, думается, что использование данной структуры в том виде как ты описал её не оправдано, ибо это можно сразу писать с использованием managed-классов, а там уже и DataBindings и т.д. и т.п. ;)
Спасибо... большое... Я просто только начинаю пользоваться MC++... и чего-то неудачно... Эту статью я читал... но нужное пропустил... (
Новые вопросы:
1) __box - используется только для value-типов... (
2) Попытался использовать вместо структуры - управляемый класс (__gc) -> в общем вылезло, что надо использовать опцию /clr : old... Пытался настроить - не получилось... (да я и не особо старался, т.к. вылезло дофига ошибок, среди которых - непонятные мне "'Travi::Day' has no default indexed property (class indexer)"... ((
3) А нельзя как-нибудь забить в ListBox - 4ерез структуру?
т.е. подскажите как можно запихнуть набор букв, инициализированный в структуре в listbox???
Заранее спасибо... )
Если не хочешь... то советую почитать спецификацию, в С++ CLI по другому объявляются переменные управляемых классов, и приведи код управляемого класса который ты хотел использовать, телепаты в отпуске до нового года :-)
Если не хочешь... то советую почитать спецификацию, в С++ CLI по другому объявляются переменные управляемых классов, и приведи код управляемого класса который ты хотел использовать, телепаты в отпуске до нового года :-)
ок... попробую то же самое на С#...)
Если что, придётся опять потревожить....)
Если что, придётся опять потревожить....)
На самом деле char* - поддерживаемый CLR тип данных (и никакого unmanaged). Просто на уровне C# он не реализован (за исключением void*, что то же самое что и IntPtr). Для того, чтобы преобразовать указатель в ссылку, используй оператор & языка C++. Или, как сказал Ap0k, применить ключевое слово __box. Есть ещё полезные методы Pointer.Box и Pointer.Unbox.