Программирование >>  Элементы языков с и с++ 

1 ... 179 180 181 [ 182 ] 183 184 185 ... 200


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); переход на новую, после выданной, строку



1 ... 179 180 181 [ 182 ] 183 184 185 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика