Программирование >>  Автоматически обновляемые приложения 

1 ... 148 149 150 [ 151 ] 152 153 154 ... 170


private void buttonl Click(object sender, EventArgs e) {

string ServerName = @ \\skynet ;

ERROR NO NETWORK = 1222, ERROR INVALID HANDLE STATE = 1609, ERROR NO BROWSER SERVERS FOUND = 6118,

public int[] GetRemoteTime(string ServerName) {

TIME OF DAY INFO result = new TIME OF DAY INFO(); IntPtr pintBuffer = IntPtr.Zero; int[] TOD INFO = new int[12];

Получим дату и время с сервера

int pintError = NetRemoteTOD(ServerName, ref pintBuffer); if (pintError > 0) { tlirow

new System.ComponentModel.Win32Exception(pintError); }

Получим данные структуры

result = (TIME OF DAY INFO)Marslial.PtrToStructure(

pintBuffer, typeof(TIME OF DAY INFO));

TOD INFO[0] = result.tod elapsedt; T0D INF0[1] = result.tod msecs; T0D INF0[2] = result. tod liours; T0D INF0[3] = result.tod mins; T0D INF0[4] = result.tod secs; T0D INF0[5] = result .tod ]iunds; T0D INF0[6] = result.tod timezone; T0D INF0[7] = result.tod tinterval; T0D INF0[8] = result.tod day; T0D INF0[9] = result. tod mont]i; TOD INFO[10] = result.tod year; T0D INF0[11] = result.tod weekday;

Освобождаем буфер NetApiBufferFree(pintBuffer);

return TOD INFO;



T0D Info[2] -= T0D Info[6] / 60;

MessageBox.Show(String.Format(

Дата/Время сервера {0} : {1}.{2}.{3} { 4} : { 5} : {6} , ServerName, T0D Info[8], T0D Info[9], TOD Info[10], T0D Info[2], T0D Info[3], T0D Info[4] ) ) ;

Примечание

Пример получения даты с сервера находится в папке NetRemoteTODSam-ple на прилагаемом диске.

Заключение

в связи с бурным развитием Интернета и локальных сетей знание протоколов связи между компьютерами становится очень важным аспектом деятельности программиста.

int[] TOD Info = new int[12];

try {

TOD Info = GetRemoteTime(ServerName);

catch (Exception err) {

Выводим сообщение об ошибке

MessageBox.Show( NetRemoteTOD from + ServerName

+ failed!\nError: + err.Message); return;



Глава 17


Функции Windows API

Программный код, который выполняется под управлением CLR (Common Language Runtime, то есть общая среда выполнения языков), называется управляемым (managed) кодом. Программный код, выполняющийся вне среды выполнения CLR, называется неуправляемым (unmanaged) кодом. Примером неуправляемого программного кода служат функции Win32 API, компоненты СОМ, интерфейсы ActiveX. Несмотря на большое количество классов .NET Framework, содержащих множество методов, программисту все равно приходится иногда прибегать к неуправляемому коду. Надо сказать, что число вызовов неуправляемого кода уменьшается с выходом каждой новой версии .NET Framework. Microsoft надеется, что наступит такое время, когда весь код можно будет сделать управляемым и безопасным. Но пока реальность такова, что без вызовов функций Windows API не обойтись, что вы могли наблюдать на примерах из предыдущих глав. Здесь мы приведем еще несколько полезных приемов с использованием функций Windows API, которые не попали в предыдущие главы. Но сначала немного теории.

Управляемый код .NET Framework может вызывать неуправляемую функцию из DLL (функцию Windows API) при помощи специального механизма Platform Invoke (сокр. P/Invoke). Для того чтобы обратиться к какой-нибудь неуправляемой библиотеке DLL, вы должны преобразовать .NET-объекты в наборы struct, char* и указателей на функции, как того требует язык С. Как сказали бы программисты на своем жаргоне- вам нужно маршалировать параметры. Более подробно о маршалинге (Marshalling) вам следует почитать в документации. Чтобы вызвать DLL-функцию из С#, сначала ее необходимо объявить (программисты, имеющие опыт работы с Visual Basic 6.0, уже знакомы с этим способом). Для этого используется атрибут Dlllmport, например, как показано в листинге 17.1.



1 ... 148 149 150 [ 151 ] 152 153 154 ... 170

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