Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите перевести структуру с C++ на Delphi / 25 сообщений из 34, страница 1 из 2
25.09.2017, 09:06:33
    #39525574
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Помогите пожалуйста перевести структуру с C++ на Delphi

Delphi XE2

Эта структура: RASCONN

Делаю так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
{$ALIGN ON}
{$MINENUMSIZE 4}

const
  RAS_MaxEntryName = 256;
  RAS_MaxDeviceType = 16;
  RAS_MaxDeviceName = 128;

type
  HRASConn = type NativeUInt;

  _RASCONN = record
    dwSize: DWORD;
    rasConn: HRASConn;
    szEntryName: array [0..RAS_MaxEntryName] of Char;
    szDeviceType: array [0..RAS_MaxDeviceType] of Char;
    szDeviceName: array [0..RAS_MaxDeviceName] of Char;
    szPhonebook: array [0..MAX_PATH - 1] of Char;
    dwSubEntry: DWORD;
    guidEntry: TGUID;
    dwFlags: DWORD;
    luid: LUID;
    guidCorrelationId: TGUID;
  end;
  RASCONN = _RASCONN;



Под Win32 все работает нормально.
Под Win64 проблема - под C++ поле hrasconn выровнено на границу 4 байт, а под Delphi выравнивание происходит на границу 8 байт.

Подскажите пожалуйста как грамотно объявить эту структуру???
...
Рейтинг: 0 / 0
25.09.2017, 09:32:53
    #39525584
Virtual Student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Mikhalich,
Посмотрите в настройках компиляции.
...
Рейтинг: 0 / 0
25.09.2017, 10:22:41
    #39525623
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Virtual Student,

А просто packed record там не прокатит?
...
Рейтинг: 0 / 0
25.09.2017, 10:28:39
    #39525631
Virtual Student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
alekcvpVirtual Student,

А просто packed record там не прокатит?
Надо проверять... (с)
...
Рейтинг: 0 / 0
25.09.2017, 13:33:29
    #39525773
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
...
Рейтинг: 0 / 0
25.09.2017, 15:40:29
    #39525859
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Помогло чтение каментов к той статье на MSDN:
Powerrice In x64, this structure should be aligned to 4 bytes.
Otherwise the dwSize calculated by sizeof(RASCONN) is not accepted by RasEnumConnections().
Please add structure alignment 4 bytes.


Оказалось мелкософт что-то намутировал.
Заработало так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  {$ALIGN 4}
  _RASCONN = record
    dwSize: DWORD;
    rasConn: HRASConn;
    szEntryName: array [0..RAS_MaxEntryName] of Char;
    szDeviceType: array [0..RAS_MaxDeviceType] of Char;
    szDeviceName: array [0..RAS_MaxDeviceName] of Char;
    szPhonebook: array [0..MAX_PATH - 1] of Char;
    dwSubEntry: DWORD;
    guidEntry: TGUID;
    dwFlags: DWORD;
    luid: LUID;
    guidCorrelationId: TGUID;
  end;
  RASCONN = _RASCONN;
  {$ALIGN ON}
...
Рейтинг: 0 / 0
25.09.2017, 15:41:07
    #39525860
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Arioch https://sourceforge.net/projects/jedi-apilib/ ?
Как раз их сначала и использовал...
...
Рейтинг: 0 / 0
25.09.2017, 17:12:33
    #39525924
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Mikhalich,

а откуда их использщовал, старый zip или новый исходники из git/svn ?

если новые - повесь им багу в трекер
...
Рейтинг: 0 / 0
26.09.2017, 01:42:44
    #39526041
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
AriochMikhalich,
а откуда их использщовал, старый zip или новый исходники из git/svn ?
если новые - повесь им багу в трекер
Брал из последнего релиза. Глянул в свежескачанном снапшоте - там тоже самое.

Вот оригинальная структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
#define RASCONNW struct tagRASCONNW
RASCONNW
{
    DWORD    dwSize;
    HRASCONN hrasconn;
    WCHAR    szEntryName[ RAS_MaxEntryName + 1 ];

#if (WINVER >= 0x400)
    WCHAR    szDeviceType[ RAS_MaxDeviceType + 1 ];
    WCHAR    szDeviceName[ RAS_MaxDeviceName + 1 ];
#endif
#if (WINVER >= 0x401)
    WCHAR    szPhonebook [ MAX_PATH ];
    DWORD    dwSubEntry;
#endif
#if (WINVER >= 0x500)
    GUID     guidEntry;
#endif
#if (WINVER >= 0x501)
    DWORD    dwFlags;
    LUID     luid;
#endif
#if (WINVER >= 0x600)
    GUID     guidCorrelationId;
#endif
};



Как на Delphi реализовать функционал условной компиляции наподобие этого?
Код: plaintext
1.
2.
3.
4.
5.
6.
.....
#if (WINVER >= 0x400)
.....
#if (WINVER >= 0x401)
.....
.....
...
Рейтинг: 0 / 0
26.09.2017, 06:28:20
    #39526055
Tactical Nuclear Penguin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
вы собрались компилировать под разными системами чтоли?
...
Рейтинг: 0 / 0
26.09.2017, 07:06:25
    #39526057
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Mikhalich,

{$IFDEF} тебе в помощь
см. примеры в windows.pas
...
Рейтинг: 0 / 0
26.09.2017, 08:52:58
    #39526086
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Tactical Nuclear Penguinвы собрались компилировать под разными системами чтоли?
Как минимум надо бы разнести код для WinNT5 и WinNT6.
...
Рейтинг: 0 / 0
26.09.2017, 08:54:04
    #39526089
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Cobalt747{$IFDEF} тебе в помощь
см. примеры в windows.pas
{$IFDEF..... что?
какая директива отслеживает для какой версии винды компилируемся? (и где вообще это задается?)
...
Рейтинг: 0 / 0
26.09.2017, 10:09:01
    #39526148
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
MikhalichCobalt747{$IFDEF} тебе в помощь
см. примеры в windows.pas
{$IFDEF..... что?
какая директива отслеживает для какой версии винды компилируемся? (и где вообще это задается?)нигде, as is
для этих целей можно использовать отложенную загрузку
...
Рейтинг: 0 / 0
26.09.2017, 14:28:25
    #39526458
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
MikhalichКак на Delphi реализовать функционал условной компиляции наподобие этого?Так и реализовать

Код: pascal
1.
2.
3.
4.
5.
6.
{$IF WINVER >= $400}
.....
{$IFEND}

{$IF WINVER >= 0x401}
.......



Сама константа WINVER в файле sdkddkver.h определяется так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#ifndef WINVER
#ifdef _WIN32_WINNT
// set WINVER based on _WIN32_WINNT
#define WINVER          _WIN32_WINNT
#else
#define WINVER          0x0601
#endif
#endif

где 0x0601 число зависящее от версии SDK

0x0601 для версии 7.1А
0x0602 для версии 8.0
...
Рейтинг: 0 / 0
26.09.2017, 15:02:13
    #39526501
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
_Vasilisk_,

А потом ещё эту константу желательно будет в PE-заголовок exe-шника прокинуть


MikhalichКак на Delphi реализовать функционал условной компиляции наподобие этого?
Код: plaintext
1.
#if (WINVER >= 0x400)



Тебе это не нужно. Выбери любое значение, в котором будут все тебе интересные поля.
Версия структуры во время исполнения определяется её первым полем DWORD dwSize;


MikhalichГлянул в свежескачанном снапшоте - там тоже самое.

Но там могут устанавливаться глобально на всю библиотеку другие настройки компилятора в плане alignment
...
Рейтинг: 0 / 0
26.09.2017, 15:18:46
    #39526515
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
AriochА потом ещё эту константу желательно будет в PE-заголовок exe-шника прокинуть А VS прокидывает?
...
Рейтинг: 0 / 0
26.09.2017, 15:53:32
    #39526558
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
_Vasilisk_,

Хороший вопрос.

По идее их линкер и их SDK должны бы эту константу из одного места брать, а уж где оно это место - хз
...
Рейтинг: 0 / 0
26.09.2017, 15:57:27
    #39526564
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
AriochПо идее их линкер и их SDK должны бы эту константу из одного места брать, а уж где оно это место - хз
У них в проекте файлик targetver.h. И там:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#pragma once

// The following macros define the minimum required platform.  The minimum required platform
// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 
// your application.  The macros work by enabling all features available on platform versions up to and 
// including the version specified.

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef _WIN32_WINNT            // Specifies that the minimum required platform is Windows Vista.
#define _WIN32_WINNT 0x0601     // Change this to the appropriate value to target other versions of Windows.
#endif
...
Рейтинг: 0 / 0
26.09.2017, 16:03:16
    #39526574
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
MikhalichУ них в проекте файлик targetver.h. И там:В общем основная мысль такая - никто за Вас целевую версию определять не будет
...
Рейтинг: 0 / 0
26.09.2017, 16:05:26
    #39526578
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Как раз наоборот.

Эта константа
Mikhalich
Код: plaintext
1.
#ifndef _WIN32_WINNT   


скорее всего в типовом сценарии приезжает как раз из скачанного и подключенного Win32 Platform SDK
...
Рейтинг: 0 / 0
26.09.2017, 16:06:29
    #39526580
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Хотя нет, перечиталд еще раз, наоборот, SDK подстраивается под tragetver.h проекта

и это правильно
...
Рейтинг: 0 / 0
26.09.2017, 16:09:36
    #39526585
Mikhalich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
_Vasilisk_В общем основная мысль такая - никто за Вас целевую версию определять не будет
Т.е. надо лапками впупыривать всю эту байду и ничего нативного нет?
...
Рейтинг: 0 / 0
26.09.2017, 16:24:59
    #39526600
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
MikhalichТ.е. надо лапками впупыривать всю эту байду и ничего нативного нет?Угу. Есть значение по умолчанию. Не устраивает - переопределяйте.

Как я понимаю, значение по умолчанию - это самая старая версия винды, поддерживаемая микрософтом на момент выхода SDK
...
Рейтинг: 0 / 0
26.09.2017, 22:13:01
    #39526770
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести структуру с C++ на Delphi
Mikhalich,

мой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
 [code=pascal]
{$REGION 'типы данных'}
type
  {$REGION 'директивы компиляции'}
    {$ALIGN 8}
  {$ENDREGION}
  {$REGION 'типы данных'}
  /// <summary>
  ///   Указатель на дескриптор соединения через RAS
  /// </summary>
  LPHRasConn = ^THRasConn;
  /// <summary>
  ///   Дескриптор соединения через RAS
  /// </summary>
  THRasConn = THandle;
  {$ENDREGION}
  {$REGION 'директивы компиляции'}
    {$ALIGN 4}  // требование Win64 для выравнивания структуры RasConn на двойное слово
  {$ENDREGION}
  {$REGION 'структуры для вызова API со специальным выравнивание'}
  /// <summary>
  ///   Ссылка на параметры RAS-соединения для Windows 2000 и более поздних версий
  /// </summary>
  LPRasConn2K = ^TRasConn2K;
  /// <summary>
  ///   Параметры RAS-соединения для Windows 2000 и более поздних версий (Unicode версия)
  /// </summary>
  /// <remarks>
  ///   В связи с требованием Win64 выравнивание структуры RasConn выполняется на двойное слово
  /// </remarks>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa376725(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasConn2K = packed record
    dwSize:       DWORD;
    rasConn:      THRasConn;
    szEntryName:  array[0..RAS_MaxEntryName] of WideChar;
    szDeviceType: array[0..RAS_MaxDeviceType] of WideChar;
    szDeviceName: array[0..RAS_MaxDeviceName] of WideChar;
    szPhonebook:  array[0..MAX_PATH - 1] of WideChar;
    dwSubEntry:   DWORD;
    guidEntry:    TGUID;
   end;
  {$ENDREGION}
  {$REGION 'директивы компиляции'}
    {$ALIGN 8}
  {$ENDREGION}
  {$REGION 'структуры для вызова API со стандартным выравниванием'}
  /// <summary>
  ///   Ссылка на параметры статуса RAS-соединения для Windows NT4 и более поздних версий
  /// </summary>
  LPRasConnStatusNT4 = ^TRasConnStatusNT4;
  /// <summary>
  ///   Параметры статуса RAS-соединения для Windows NT4 и более поздних версий (Unicode версия)
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa376728(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasConnStatusNT4 = packed record 
    dwSize:        DWORD;
    rasConnstate:  Word;
    dwError:       DWORD;
    szDeviceType:  array[0..RAS_MaxDeviceType] of WideChar;
    szDeviceName:  array[0..RAS_MaxDeviceName] of WideChar;
    szPhoneNumber: array[0..RAS_MaxPhoneNumber] of WideChar;
  end;
  /// <summary>
  ///   Ссылка на параметры Extensible Authentication Protocol при установке RAS-соединения
  ///   для Windows 2000 и более поздних версий
  /// </summary>
  // (Windows 2000 и более поздние версии)
  LPRasEapInfo = ^TRasEapInfo;
  /// <summary>
  ///   Параметры Extensible Authentication Protocol при установке RAS-соединения
  ///   для Windows 2000 и более поздних версий
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa377242(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasEapInfo = packed record
    dwSizeofEapInfo: DWORD;
    pbEapInfo: Pointer;
  end;
  /// <summary>
  ///   Ссылка на параметры набора RAS-соединения для Windows NT4 и более поздних версий
  /// </summary>
  LPRasDialParamsNT4 = ^TRasDialParamsNT4;
  /// <summary>
  ///   Параметры набора RAS-соединения для Windows NT4 и более поздних версий (Unicode версия)
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa377238(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasDialParamsNT4 = packed record
    dwSize:           DWORD;
    szEntryName:      array[0..RAS_MaxEntryName] of WideChar;
    szPhoneNumber:    array[0..RAS_MaxPhoneNumber] of WideChar;
    szCallbackNumber: array[0..RAS_MaxCallbackNumber] of WideChar;
    szUserName:       array[0..UNLEN] of WideChar;
    szPassword:       array[0..PWLEN] of WideChar;
    szDomain:         array[0..DNLEN] of WideChar;
    dwSubEntry:       DWORD;
    dwCallbackId:     Pointer;
  end;
  /// <summary>
  ///   Ссылка на параметры названия элемента телефоной книги RAS-соединения для Windows 2000
  ///   и более поздних версий
  /// </summary>
  LPRasEntryNameW2K = ^TRasEntryNameW2K;
  /// <summary>
  ///   Параметры названия элемента телефоной книги RAS-соединения для Windows 2000
  ///   и более поздних версий (Unicode версия)
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa377267(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasEntryNameW2K = packed record
    dwSize:          DWORD;
    szEntryName:     array[0..RAS_MaxEntryName] of WideChar;
    dwFlags:         DWORD;
    szPhonebookPath: array[0..MAX_PATH] Of WideChar;
  end;
  /// <summary>
  ///   Ссылка на RAS IPv4-адрес
  /// </summary>
  LPRasIPAddr = ^TRasIPAddr;
  /// <summary>
  ///   RAS IPv4-адрес
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa377578(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasIPAddr = packed record
    A, B, C, D: Byte;
  end;
  /// <summary>
  ///   Ссылка на элемент телефонной книги RAS API для Windows XP и более поздних версий
  /// </summary>
  LPRasEntryXP = ^TRasEntryXP;
  /// <summary>
  ///   Элемент телефонной книги RAS API для Windows XP и более поздних версий (Unicode версия)
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/aa377274(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasEntryXP = packed record
    dwSize:                     DWORD;
    dwfOptions:                 DWORD;
    dwCountryID:                DWORD;
    dwCountryCode:              DWORD;
    szAreaCode:                 array[0..RAS_MaxAreaCode] of WideChar;
    szLocalPhoneNumber:         array[0..RAS_MaxPhoneNumber] of WideChar;
    dwAlternateOffset:          DWORD;
    ipaddr:                     TRasIPAddr;
    ipaddrDns:                  TRasIPAddr;
    ipaddrDnsAlt:               TRasIPAddr;
    ipaddrWins:                 TRasIPAddr;
    ipaddrWinsAlt:              TRasIPAddr;
    dwFrameSize:                DWORD;
    dwfNetProtocols:            DWORD;
    dwFramingProtocol:          DWORD;
    szScript:                   array[0..MAX_PATH - 1] of WideChar;
    szAutodialDll:              array[0..MAX_PATH - 1] of WideChar;
    szAutodialFunc:             array[0..MAX_PATH - 1] of WideChar;
    szDeviceType:               array[0..RAS_MaxDeviceType] of WideChar;
    szDeviceName:               array[0..RAS_MaxDeviceName] of WideChar;
    szX25PadType:               array[0..RAS_MaxPadType] of WideChar;
    szX25Address:               array[0..RAS_MaxX25Address] of WideChar;
    szX25Facilities:            array[0..RAS_MaxFacilities] of WideChar;
    szX25UserData:              array[0..RAS_MaxUserData] of WideChar;
    dwChannels:                 DWORD;
    dwReserved1:                DWORD;
    dwReserved2:                DWORD;
    dwSubEntries:               DWORD;
    dwDialMode:                 DWORD;
    dwDialExtraPercent:         DWORD;
    dwDialExtraSampleSeconds:   DWORD;
    dwHangUpExtraPercent:       DWORD;
    dwHangUpExtraSampleSeconds: DWORD;
    dwIdleDisconnectSeconds:    DWORD;
    dwType:                     DWORD;
    dwEncryptionType:           DWORD;
    dwCustomAuthKey:            DWORD;
    guidId:                     TGUID;
    szCustomDialDll:            array[0..MAX_PATH - 1] of WideChar;
    dwVpnStrategy:              DWORD;
    dwfOptions2:                DWORD;
    dwfOptions3:                DWORD;
    szDnsSuffix:                array[0..RAS_MaxDnsSuffix - 1] of WideChar;
    dwTcpWindowSize:            DWORD;
    szPrerequisitePbk:          array[0..MAX_PATH - 1] of WideChar;
    szPrerequisiteEntry:        array[0..RAS_MaxEntryName] of WideChar;
    dwRedialCount:              DWORD;
    dwRedialPause:              DWORD;
  end;
  /// <summary>
  ///   Ссылка на дополнительные параметры набора RAS-соединения для Windows 2000
  ///   и более поздних версий
  /// </summary>
  LPRasDialExtensionsW2K = ^TRasDialExtensionsW2K;
  /// <summary>
  ///   Дополнительные параметры набора RAS-соединения для Windows 2000 и более поздних версий
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa377029(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasDialExtensionsW2K = packed record
    dwSize:     DWORD;
    dwfOptions: DWORD;
    hwndParent: HWnd;
    reserved:   Pointer;
    reserved1:  Pointer;
    RasEapInfo: TRasEapInfo;
  end;
  /// <summary>
  ///   Ссылка на параметры статистики RAS-соединения для Windows 2000 и более поздних версий
  /// </summary>
  LPRasStats = ^TRasStats;
  /// <summary>
  ///   Параметры статистики RAS-соединения для Windows 2000 и более поздних версий
  /// </summary>
  /// <seealso href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa446723(v=vs.85).aspx">
  ///   MSDN
  /// </seealso>
  TRasStats = packed record
    dwSize:                DWORD;
    dwBytesXmited:         DWORD;
    dwBytesRcved:          DWORD;
    dwFramesXmited:        DWORD;
    dwFramesRcved:         DWORD;
    dwCrcErr:              DWORD;
    dwTimeoutErr:          DWORD;
    dwAlignmentErr:        DWORD;
    dwHardwareOverrunErr:  DWORD;
    dwFramingErr:          DWORD;
    dwBufferOverrunErr:    DWORD;
    dwCompressionRatioIn:  DWORD;
    dwCompressionRatioOut: DWORD;
    dwBps:                 DWORD;
    dwConnectDuration:     DWORD;
  end;
  {$ENDREGION}
{$ENDREGION}

{$REGION 'глобальные процедуры и функции'}
/// <summary>
///   Определение доступности RAS API
/// </summary>
/// <returns>
///   <list type="table">
///     <listheader>
///       <term>Результат</term>
///       <description>Описание</description>
///     </listheader>
///     <item>
///       <term>TRUE</term>
///       <description>RAS API доступно для работы</description>
///     </item>
///     <item>
///       <term>FALSE</term>
///       <description>RAS API не доступно</description>
///     </item>
///   </list>
/// </returns>
function IsRasApiAvailable: BOOL;
/// <summary>
///   Функция RasEnumConnections (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377284(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasEnumConnections(lpRasConn: LPRasConn2K; var lpcBufferSize: DWORD;
  var lpcConnections: DWORD): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasEnumConnectionsW';{$ENDIF}
/// <summary>
///   Функция RasEnumEntries (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377380(VS.85).aspx">
///   MSDN
/// </seealso>
function RasEnumEntries(Reserved: PWideChar; lpszPhonebook: PWideChar;
  lpRasEntryName: LPRasEntryNameW2K; var lpcBufferSize: DWORD; var lpcEntries: DWORD): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasEnumEntriesW';{$ENDIF}
/// <summary>
///   Функция RasGetEntryProperties (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377535(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasGetEntryProperties(lpszPhonebook: PWideChar; szEntry: PWideChar;
  var lpRasEntry: TRasEntryXP; var dwEntrySize: DWORD; lpbDeviceInfo: Pointer;
  var dwDeviceInfoSize: DWORD): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasGetEntryPropertiesW';{$ENDIF}
/// <summary>
///   Функция RasSetEntryProperties (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377827(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasSetEntryProperties(lpszPhonebook: PWideChar; szEntry: PWideChar;
  lpRasEntry: Pointer; dwEntrySize: DWORD; lpbDeviceInfo: Pointer; dwDeviceInfoSize: DWORD
  ): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasSetEntryPropertiesW';{$ENDIF}
/// <summary>
///   Функция RasGetEntryDialParams (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377529(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasGetEntryDialParams(lpszPhonebook: PWideChar; var lpRasDialParams: TRasDialParamsNT4;
  var lpfPassword: BOOL): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasGetEntryDialParamsW';{$ENDIF}
/// <summary>
///   Функция RasSetEntryDialParams (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377821(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasSetEntryDialParams(lpszPhonebook: PWideChar; var lpRasDialParams: TRasDialParamsNT4;
  fRemovePassword: BOOL): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasSetEntryDialParamsW';{$ENDIF}
/// <summary>
///   Функция RasDial (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377004(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasDial(lpRasDialExtensions: LPRasDialExtensionsW2K; lpszPhonebook: PWideChar;
  lpRasDialParams: LPRasDialParamsNT4; dwNotifierType: DWORD; lpvNotifier: Pointer;
  var hRasConn: THRasConn): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasDialW';{$ENDIF}
/// <summary>
///   Функция RasHangUp (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377567(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasHangUp(hRasConn: THRasConn): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasHangUpW';{$ENDIF}
/// <summary>
///   Функция RasGetConnectStatus (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377503(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasGetConnectStatus(hRasConn: THRasConn; lpRasConnStatus: LPRASConnStatusNT4): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasGetConnectStatusW';{$ENDIF}
/// <summary>
///   Функция RasGetConnectionStatistics (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa377499(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasGetConnectionStatistics(hRasConn: THRasConn; lpStatistics: LPRasStats): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasGetConnectionStatistics';{$ENDIF}
/// <summary>
///   Функция RasClearConnectionStatistics (RAS API)
/// </summary>
/// <seealso href="https://msdn.microsoft.com/en-us/library/aa376722(v=vs.85).aspx">
///   MSDN
/// </seealso>
function RasClearConnectionStatistics(hRasConn: THRasConn): DWORD;
  {$IFNDEF DYNAMIC_API}stdcall; external 'rasapi32.dll' name 'RasClearConnectionStatistics';{$ENDIF}
{$ENDREGION}

...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите перевести структуру с C++ на Delphi / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]