powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите перевести структуру с C++ на Delphi
25 сообщений из 34, страница 1 из 2
Помогите перевести структуру с C++ на Delphi
    #39525574
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста перевести структуру с 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
Помогите перевести структуру с C++ на Delphi
    #39525584
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhalich,
Посмотрите в настройках компиляции.
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39525623
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Student,

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

А просто packed record там не прокатит?
Надо проверять... (с)
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39525773
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39525859
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогло чтение каментов к той статье на 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
Помогите перевести структуру с C++ на Delphi
    #39525860
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch https://sourceforge.net/projects/jedi-apilib/ ?
Как раз их сначала и использовал...
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39525924
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhalich,

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

если новые - повесь им багу в трекер
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526041
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Помогите перевести структуру с C++ на Delphi
    #39526055
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы собрались компилировать под разными системами чтоли?
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526057
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhalich,

{$IFDEF} тебе в помощь
см. примеры в windows.pas
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526086
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tactical Nuclear Penguinвы собрались компилировать под разными системами чтоли?
Как минимум надо бы разнести код для WinNT5 и WinNT6.
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526089
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747{$IFDEF} тебе в помощь
см. примеры в windows.pas
{$IFDEF..... что?
какая директива отслеживает для какой версии винды компилируемся? (и где вообще это задается?)
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526148
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikhalichCobalt747{$IFDEF} тебе в помощь
см. примеры в windows.pas
{$IFDEF..... что?
какая директива отслеживает для какой версии винды компилируемся? (и где вообще это задается?)нигде, as is
для этих целей можно использовать отложенную загрузку
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526458
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите перевести структуру с C++ на Delphi
    #39526501
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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


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



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


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

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

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

По идее их линкер и их SDK должны бы эту константу из одного места брать, а уж где оно это место - хз
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526564
Mikhalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Помогите перевести структуру с C++ на Delphi
    #39526574
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikhalichУ них в проекте файлик targetver.h. И там:В общем основная мысль такая - никто за Вас целевую версию определять не будет
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526578
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз наоборот.

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


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

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

Как я понимаю, значение по умолчанию - это самая старая версия винды, поддерживаемая микрософтом на момент выхода SDK
...
Рейтинг: 0 / 0
Помогите перевести структуру с C++ на Delphi
    #39526770
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 34, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите перевести структуру с C++ на Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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