Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Помогите пожалуйста перевести структуру с C++ на Delphi

Delphi XE2

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

Делаю так:
{$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 байт.

Подскажите пожалуйста как грамотно объявить эту структуру???
25 сен 17, 09:06    [20819693]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Virtual Student
Member

Откуда: Belarus
Сообщений: 251
Mikhalich,
Посмотрите в настройках компиляции.

К сообщению приложен файл. Размер - 68Kb
25 сен 17, 09:32    [20819725]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
alekcvp
Member

Откуда:
Сообщений: 382
Virtual Student,

А просто packed record там не прокатит?
25 сен 17, 10:22    [20819866]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Virtual Student
Member

Откуда: Belarus
Сообщений: 251
alekcvp
Virtual Student,

А просто packed record там не прокатит?

Надо проверять... (с)
25 сен 17, 10:28    [20819889]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Arioch
Member

Откуда:
Сообщений: 9036
https://sourceforge.net/projects/jedi-apilib/ ?
25 сен 17, 13:33    [20820552]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Помогло чтение каментов к той статье на 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.


Оказалось мелкософт что-то намутировал.
Заработало так:
  {$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}
25 сен 17, 15:40    [20821096]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Arioch
https://sourceforge.net/projects/jedi-apilib/ ?

Как раз их сначала и использовал...
25 сен 17, 15:41    [20821099]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Arioch
Member

Откуда:
Сообщений: 9036
Mikhalich,

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

если новые - повесь им багу в трекер
25 сен 17, 17:12    [20821397]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Arioch
Mikhalich,
а откуда их использщовал, старый zip или новый исходники из git/svn ?
если новые - повесь им багу в трекер

Брал из последнего релиза. Глянул в свежескачанном снапшоте - там тоже самое.

Вот оригинальная структура:
#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 реализовать функционал условной компиляции наподобие этого?
.....
#if (WINVER >= 0x400)
.....
#if (WINVER >= 0x401)
.....
.....
26 сен 17, 01:42    [20822289]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2361
вы собрались компилировать под разными системами чтоли?
26 сен 17, 06:28    [20822328]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Cobalt747
Member

Откуда:
Сообщений: 1953
Mikhalich,

{$IFDEF} тебе в помощь
см. примеры в windows.pas
26 сен 17, 07:06    [20822340]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Tactical Nuclear Penguin
вы собрались компилировать под разными системами чтоли?

Как минимум надо бы разнести код для WinNT5 и WinNT6.
26 сен 17, 08:52    [20822438]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Cobalt747
{$IFDEF} тебе в помощь
см. примеры в windows.pas

{$IFDEF..... что?
какая директива отслеживает для какой версии винды компилируемся? (и где вообще это задается?)
26 сен 17, 08:54    [20822444]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 2111
Mikhalich
Cobalt747
{$IFDEF} тебе в помощь
см. примеры в windows.pas

{$IFDEF..... что?
какая директива отслеживает для какой версии винды компилируемся? (и где вообще это задается?)
нигде, as is
для этих целей можно использовать отложенную загрузку
26 сен 17, 10:09    [20822685]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
Mikhalich
Как на Delphi реализовать функционал условной компиляции наподобие этого?
Так и реализовать

{$IF WINVER >= $400}
.....
{$IFEND}

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


Сама константа WINVER в файле sdkddkver.h определяется так
#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
26 сен 17, 14:28    [20823945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Arioch
Member

Откуда:
Сообщений: 9036
_Vasilisk_,

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


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


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


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


Но там могут устанавливаться глобально на всю библиотеку другие настройки компилятора в плане alignment
26 сен 17, 15:02    [20824133]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
Arioch
А потом ещё эту константу желательно будет в PE-заголовок exe-шника прокинуть
А VS прокидывает?
26 сен 17, 15:18    [20824195]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Arioch
Member

Откуда:
Сообщений: 9036
_Vasilisk_,

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

По идее их линкер и их SDK должны бы эту константу из одного места брать, а уж где оно это место - хз
26 сен 17, 15:53    [20824331]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
Arioch
По идее их линкер и их SDK должны бы эту константу из одного места брать, а уж где оно это место - хз

У них в проекте файлик targetver.h. И там:
#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
26 сен 17, 15:57    [20824342]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
Mikhalich
У них в проекте файлик targetver.h. И там:
В общем основная мысль такая - никто за Вас целевую версию определять не будет
26 сен 17, 16:03    [20824373]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Arioch
Member

Откуда:
Сообщений: 9036
Как раз наоборот.

Эта константа
Mikhalich
#ifndef _WIN32_WINNT   

скорее всего в типовом сценарии приезжает как раз из скачанного и подключенного Win32 Platform SDK
26 сен 17, 16:05    [20824387]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Arioch
Member

Откуда:
Сообщений: 9036
Хотя нет, перечиталд еще раз, наоборот, SDK подстраивается под tragetver.h проекта

и это правильно
26 сен 17, 16:06    [20824391]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
Mikhalich
Member

Откуда:
Сообщений: 281
_Vasilisk_
В общем основная мысль такая - никто за Вас целевую версию определять не будет

Т.е. надо лапками впупыривать всю эту байду и ничего нативного нет?
26 сен 17, 16:09    [20824399]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9740
Mikhalich
Т.е. надо лапками впупыривать всю эту байду и ничего нативного нет?
Угу. Есть значение по умолчанию. Не устраивает - переопределяйте.

Как я понимаю, значение по умолчанию - это самая старая версия винды, поддерживаемая микрософтом на момент выхода SDK
26 сен 17, 16:24    [20824436]     Ответить | Цитировать Сообщить модератору
 Re: Помогите перевести структуру с C++ на Delphi  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 156
Mikhalich,

мой вариант:
+
{$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}
26 сен 17, 22:13    [20825224]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить