|
Программирование >> Элементы языков с и с++
int count; double* item; 1; Ipragma unmanaged void UnmanagedTakesListStruct(ListStruct list) I printf s( [unmanaged] count = %d\n , list.count); for (int i=0; i<list.count; i++) printf s( array[%d] = %.2f\n , i, list.item[i]); Ipragma managed int mainO I ListStruct list; list.count = 10; ; list.item =new doii>le[list.count]; оператор new размещает объект в native-куче и возвращает указатель на этот объект. В данном случае в куче формируется одномерный массив * из элементов list.count. Console::WriteLine( [managed] count = {0} , list.count); создается указатель на объект, формирующий случайные числа: RandOTi г = gcnew Random(0); иницИализахдая массива list.item[] случайными числами из интервала [0,1], умноженными на 100 J Листинг 14.7 2008-Acces to Char in System String.срр : main project file. #include stdafx.h #include<vcclr.h> . . / using namespace System; / int mainO { String mystring = abcdefg ; /♦Описание метода показано в примере 3 */ interior ptr<const Char> ppchar = PtrToStringChars( mystring ); /*цикл no строке символов: от нулевого (*ppchar) до признака конца строки (L\0)*/ \ for ( ; *ppchar != L\0; ++ppchar ) for (int i=0; i<list.count; i++) { list.item[i] = r->NextDouble() * 100.0; Console::WriteLine( array[{0}] = {1} , i, list.item[il); вызов native-фyнкшIи в inanaged-функции . UnmanagedTakesListStruct(list); Пример 7. Доступ к символам в классе System::String Это частный случай примера 3. Здесь интересна работа с native-указателем, показывающим на native-строку (строку обычных символов) в управляемой куче. Кавычки поставлены для того, чтобы указать на необычность ситуации: каждый символ занимает (в отличие от обычной строки символов типа char) два, а не один байт, т. к. находится в управляемой куче. Поэтому и признак конца - это не обычный символ \0,аь\0. Текст программы показан в листинге 14.7, а результат - на рис. 14.7. C:\WINDOWS\sy£tem92\cmd.exc abcdefg Цля продолжения нажмите любую клавишу Рис. 14.7. Доступ к символам System: String-строки Пример 8. Преобразование char* в массив System::Byte Текст программы показан в листинге 14.8, а результат - на рис. 14.8. Листинг 14.8 2008-char-Astrisk to System Byte Array.cpp : main project file. Itinclude stdafx.h Itinclude <string.h> for strlen() using namespace System; using namespace System::Runtime::InteropServices; int mainO { char buf[] = Native String ; int len = strlen (buf); IfanvMb. строки array< Byte > byteArray = gcnew array< Byte >(len + 2); /♦копирование символов char с преобразованием указателя на них во внутренний указатель на них в управляемой куче. Преобразование идет в обычном С-стиле:*/ Marshal::Сору((IntPtr)buf,byteArray, О, len); Console::Write(*ppchar); Console::Write(L\n); переход на новую, после выданной, строку
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |