На этом шаге мы приведем программу, реализующую указанное преобразование. Дескрипторами называют указатели в среде CLR. Именно они указывают на объект в управляемой куче. Напрямую нельзя объявить дескриптор в native-типе. Например, в native-функции вы не можете сделать объявление типа такого: String^ s; Компилятор вам выдаст ошибку. Файл vcclr.h содержит специальный настраиваемый шаблон gcroot, […]
Архив категории ‘Среда программирования Microsoft Visual C++ 2010’
Пример 11. Преобразование string-строки в String-строку


На этом шаге мы приведем программу, реализующую указанное преобразование. Текст программы приведен ниже, а результат - на рисунке 1. // 222_1.cpp: главный файл проекта. #include "stdafx.h" #include <string> #include <iostream> using namespace System; using namespace std; void main() { string str = "test"; //можно записать и так, используя конструктор: //string str = string("test"); […]
Пример 10. Преобразование String-строки в string-строку


На этом шаге мы приведем программы, реализующие указанные преобразования. Фирма Microsoft ввела в C++ типы строк string и wstring. На самом деле - это синонимы класса basic_string, введенные через typedef. Первый тип относится к классу, строки которого (как элементы класса) относятся к типу char, а второй тип - к классу, строки которого […]
Пример 9. Преобразование System::String в wchar_t* или char*


На этом шаге мы приведем программу, реализующую указанное преобразование. Метод PtrToStringChars() из vcclr.h можно использовать для преобразования строки System:: String в native-строку типа wchar_t* или char*. Метод возвращает указатель на Юникод-строку, т. к. строки CLR - это строки Юникода. Затем, как показано в примере, вы можете конвертировать "широкую" строку в обычную. […]
Пример 8. Преобразование char* в массив System::Byte


На этом шаге мы приведем программу, реализующую указанное преобразование. Текст программы приведен ниже, а результат - на рисунке 1. // 219_1.cpp: главный файл проекта. #include "stdafx.h" #include <string.h> //for strlen() using namespace System; using namespace System::Runtime::InteropServices; void main() { char buf[] = "Native String"; int len = strlen(buf); //длина строки array< Byte >^ […]
Пример 7. Доступ к символам в классе System::String


На этом шаге мы приведем программу, реализующую указанное преобразование. Это частный случай примера 3. Здесь интересна работа с native-указателем, показывающим на native-строку (строку "обычных" символов) в управляемой куче. Кавычки поставлены для того, чтобы указать на необычность ситуации: каждый символ занимает (в отличие от обычной строки символов типа char) два, а не один байт, […]
Пример 6. Работа с массивом элементов native-структуры в managed-функции


На этом шаге мы приведем программу, реализующую указанное преобразование. Текст программы приведен ниже, результат - на рисунке 1. // 217_1.cpp: главный файл проекта. #include "stdafx.h" #include <stdio.h> using namespace System; using namespace System::Runtime::InteropServices; // unmanaged struct struct ListStruct { int count; double* item; }; #pragma unmanaged void UnmanagedTakesListStruct(ListStruct list) { printf_s("[unmanaged] count = […]
Пример 5. Маршаллинг native-структуры


На этом шаге мы приведем программу, реализующую указанное преобразование. В данном примере показана работа с native-структурой в managed-функции. Текст программы приведен ниже, результат - на рисунке 1. // 216_1.cpp: главный файл проекта. #include "stdafx.h" #include <stdio.h> #include <math.h> using namespace System; using namespace System::Runtime::InteropServices; #pragma unmanaged //native-структура: struct Location { int x; int […]
Пример 4. Преобразование строки wchar_t в строку String^


На этом шаге мы приведем программу, реализующую указанное преобразование. Это преобразование - обратное приведенному в примере 3 предыдущего шага. Преобразование, которое мы рассматриваем, фактически переводит native Юникод-строку в состояние managed. А в этом состоянии со строкой уже можно работать, применяя managed-указатель ^. Текст программы приведен ниже, а результат - на рисунке 1. […]
Пример 3. Преобразование String^ строки в строку wchar_t


На этом шаге мы приведем программу, реализующую указанное преобразование. Тип wchar_t - это native-тип символа по таблице Юникода. Этот тип данного отличается от типа char тем, что символ кодируется двумя байтами, а не одним. Класс String тоже создает строку из Юникод-символов, однако по своему определению относится к managed-типу. Преобразование, которое мы рассматриваем, […]