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

1 ... 183 184 185 [ 186 ] 187 188 189 ... 200


public value struct V CLR-структура (

String str;

class Native native-класс I

public:

/*член native-класса - дескриптор v handle:*/ gcroot< V > v handle;

int tnainO managed-функция I

Native native; native-переменная, объявленная в managed-функции V v; managed-переменная

по тем или иным причинам перемещается в куче, дескриптор всегда возвращает новый адрес объекта. Переменная не может получить pin-указатель (предохраняющий объект от перемещения в такой куче), пока она назначена шаблону gcroot.

Текст программы показан в листинге 14.13, а результат - на рис. 14.13.

2008-Handle in native type.срр : main project file.

linclude stdafx.h linclude <vcclr.h>

using namespace System;

reference to value in native.cpp compile with: /clr



сТ C:\WINDOWS\system32V:md.exe

tring in U: Hello to all

ЛЯ продолжения нажмите любую клавишу .

Рис. 14.13. Работа с дескриптором в native-памяти

Пример 13.

Работа с дескриптором в native-функции

Текст программы показан в листинге 14.14. а результат - на рис. 14.14.

I Листинг 14.14

2008-Handle in native function.срр : main project file.

iinclude stdafx.h iinclude gcroot.h

using namespace System;

ipragma managed

class StringWrapper managed-класс i

private:

gcroot<String > x;

/♦дескриптору присваивается значение v,

т.е. формируется ссылка на managed-структуру, из которой теперь можно извлекать ее элементы:*/ native.v handle = v;

native.v handle->str = Hello to all ;

Console::WriteLine( String in V: {0} , native.v handle->str);



public:

/♦метод присваивает private-члену х класса

(т.е. дескриптору) адрес строки ManagedString в управляемой куче:*/ StringWrapper() (

String str = gcnew String( ManagedString ); X = str;

/*метод-член класса присваивает пер)еменной targetStr значение дескриптора х, который указывает на строку ManagedString , и выводит эту строку:*/ void PrintString()

String targetStr = x;

Console::WriteLine( StringWrapper::x == (0} , targetStr);

#pragma unmanaged

int mainO native-функция

StringWrapper s; s-переменная managed-Tnna

s.PrintString0; печать строки ManagedString

~ C:\WINOOWS\system32\cmd.exe

StrxngUrapper: :x == tIanagedSti-xng ima продолжения нажмите любую клавишу

Рис. 14.14. Результат работы managed-типа в native-функции



1 ... 183 184 185 [ 186 ] 187 188 189 ... 200

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