|
Программирование >> Элементы языков с и с++
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-функции
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |