|
Программирование >> Элементы языков с и с++
546 . Глава 14 Пример 5. Маршаллинг native-структуры в данном примере показана работа с native-структурой в managed-функции. Текст программы показан в листинге 14.5, результат - на рис. 14.5. Листинг 14.5 2008-Marshal Structure.срр : main project file. #include stdafx.h ttinclude <stdio.h> ttinclude <math.h> using namespace System; using namespace System::Runtime::InteropServices; #pragma unmanaged native-структура: struct Location int x; int y; , }; параметры функции - два экземпляра структуры: double GetDistance(Location loci. Location loc2) ( printf( [unmanaged] loci(%d,%d)locl.x, locl.y); . printf( loc2(%d,%d)\n , loc2.x, loc2.y); double h = locl.x - loc2.x; double V = locl.y = loc2.y; квадратный корень из h + v: double dist = sqrt( pow(h,2) + pow(v,2) ); ipragma managed работа со структурой в managed-фyнкдии: int main О Location loci; locl.x = 0; loci.у = 0; Location loc2; loc2.x = 100; loc2.y = 100; [ вызов native-функции в managed-фyнкIдии: double dist = GetDistance(loci, loc2); Console::WriteLine( [managed] distance = (0) , dist); Location loc3; вызов native-функции в managed-функции в ее параметре указатель, поэтому берется адрес экземпляра структуры: InitLocation (slocS); Console::WriteLine( [managed] x=(0) y={l} , locS.x, locS.y); C:\WIHDOWSVsystem32\cmd.exe [unmanaged] locl<0,0> 1ос2<100.10в> [managed] distance = 141,42135623731 [unnanaged] Initializing location... [managed] x=50 у=5в JUfl продолжения нажмите любую клавишу Рис. 14.5. Маршаллинг структуры return dist; параметр функции - указатель на структуру void InitLocation (Location* Ip) I printf( [unmanaged] Initializing location...\n ); lp->x =50; lp->y = 50; Пример 6. Работа с массивом элементов native-структуры в managed-функции Текст программы показан в листинге 14.6, результат - на рис. 14.6. C:\WINDOWS\system32\cmd.exe tnanagedi count - 10 array[О] = 72,624326996796 arravtl] = 81,7325359590969 arrav[2] = 76,8022689394663 arravIS] = 55,8161191436537 array[4] = 20,6033154021033 array[5] = 55,8884794618415 аггауЕб] = 98,6027066011926 array[7] = 44,2177873318716 array[8] = 97,754975314138 array[9] = 27,370445768987 [unmanaged] count = 10 >rray[0] = 72.62 array [1 ] <trray[2] array[3] :array[4] array 15 ] array[6] array[7] array[8] <<rrayt9 ] 81.73 76.80 55.82 20.60 55.89 90.60 44.22 97.75 27.37 Для продолжения нажмите любую клавниу Рис. 14.6. Результат работы с массивом элементов native-структуры в managed-функции . Листинг 14.6 2008-Marshal Item Structure Instances.срр : main project file. ttinclude stdafx.h ttinclude <stdio.h> using namespace System; using namespace System::Runtime::InteropServices; unmanaged struct struct ListStruct
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |