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

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


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



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

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