Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Вниз

Импортирование данных о соединении   Найти похожие ветки 

 
BlackSun   (2003-12-01 23:41) [0]

Импортирую данные следующим образом. Вся проблема в том, что если в соединении указано несколько телефонных номеров, то я ни одного не получаю. Как мне получить все телефонные номера? Подскажите, пожалуйста...
procedure LoadEntry(const EntryName: string; var UserName,Password,PhoneNumber: string);
var
re: TRasEntry; EntrySize, DevInfoSize: integer;
rdp: TRASDIALPARAMS;
PasswordFlag: BOOL;
Dns,DnsAlt:string;
begin;
UserName:=""; Password:=""; PhoneNumber:="";
if EntryName<>"" then begin; // setup Ras Dial Parameters
FillChar(rdp,SizeOf(rdp),0); rdp.dwSize:=SizeOf(rdp);
strCopy(rdp.szEntryName, PChar(EntryName));
if RasGetEntryDialParamsA(nil, rdp, PasswordFlag)=0 then begin;
UserName:=rdp.szUserName;
Password:=rdp.szPassword;
re.dwSize:=SizeOf(re); EntrySize:=SizeOf(re); DevInfoSize:=0;
if RasGetEntryPropertiesA(nil,PChar(EntryName),@re,EntrySize,nil,DevInfoSize)=0 then begin;
PhoneNumber:=re.szLocalPhoneNumber;
with re.ipaddrDns do Dns:=Format("%d.%d.%d.%d",[a,b,c,d]);
with re.ipaddrDnsAlt do DnsAlt:=Format("%d.%d.%d.%d",[a,b,c,d]);
end;
end;
end;
end;


 
BlackSun   (2003-12-02 16:41) [1]

Неужели никто не знает? :( Очень нужно...


 
dimod   (2003-12-05 11:04) [2]

Привет,

Используй RAS API
RasEnumEntries для получения списка
и RasGetEntryProperties для каждого элемента списка


 
BlackSun   (2003-12-06 05:19) [3]

2dimod, Хмм... а я соб-но так и делаю в исходнике...получаю имя соединения, а потом пытаюсь получить телефоны данного соединения, вот только если там несколько телефонов, то функция RasGetEntryPropertiesА ничего не возвращает, а если один телефон, то тогда она один телефон и возвращает...


 
dimod   (2003-12-08 18:07) [4]

Вырезка из MSDN

// WINVER < 0x400 = Windows NT 3.5, Windows NT 3.51
// WINVER = 0x400 = Windows 95, Windows98, Windows NT4
// WINVER > 0x400 = Windows NT4 enhancements
// WINVER = 0x500 = Windows 2000
...
typedef struct tagRASENTRY {
DWORD dwSize;
DWORD dwfOptions;
//
// Location/phone number.
//
DWORD dwCountryID;
DWORD dwCountryCode;
TCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
TCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
DWORD dwAlternateOffset;
//
// PPP/Ip
//
RASIPADDR ipaddr;
RASIPADDR ipaddrDns;
RASIPADDR ipaddrDnsAlt;
RASIPADDR ipaddrWins;
RASIPADDR ipaddrWinsAlt;
//
// Framing
//
DWORD dwFrameSize;
DWORD dwfNetProtocols;
DWORD dwFramingProtocol;
//
// Scripting
//
TCHAR szScript[ MAX_PATH ];
//
// AutoDial
//
TCHAR szAutodialDll[ MAX_PATH ];
TCHAR szAutodialFunc[ MAX_PATH ];
//
// Device
//
TCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
TCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
//
// X.25
//
TCHAR szX25PadType[ RAS_MaxPadType + 1 ];
TCHAR szX25Address[ RAS_MaxX25Address + 1 ];
TCHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
TCHAR szX25UserData[ RAS_MaxUserData + 1 ];
DWORD dwChannels;
//
// Reserved
//
DWORD dwReserved1;
DWORD dwReserved2;
#if (WINVER >= 0x401)
//
// Multilink
//
DWORD dwSubEntries;
DWORD dwDialMode;
DWORD dwDialExtraPercent;
DWORD dwDialExtraSampleSeconds;
DWORD dwHangUpExtraPercent;
DWORD dwHangUpExtraSampleSeconds;
//
// Idle timeout
//
DWORD dwIdleDisconnectSeconds;
#endif
#if (WINVER >= 0x500)
//
// Port Name
//
TCHAR szPortName[ RAS_MaxDeviceName + 1 ];
#endif
} RASENTRY;

Посмотри описание структуры TRasEntry. Может у тебя
скомпиллировано не для NT-платформы.

dwAlternateOffset
Specifies the offset, in bytes, from the beginning of the structure to a list of consecutive null-terminated strings. The last string is terminated by two consecutive null characters. The strings are alternate phone numbers that RAS dials in the order listed if the primary number (see szLocalPhoneNumber) fails to connect. The alternate phone number strings are ANSI or Unicode, depending on whether you use the ANSI or Unicode version of the structure.

По dwAlternateOffset-смещению от начала структуры список
строк телефонов (строка с завершающим #0, как в Си).

Для получения версии структуры по MSDN необходимо

var
Entry: LPRasEntry;
EntrySize, devinfoSize, LenNum1, Ofs: Integer;
PDataBa : PByteArray;
NumAdd : String; // доп. номера

...
EntrySize := 0; // обязательно
DevInfoSize := 0;
// такой вызов
if RasGetEntryProperties(nil, PChar(NameEntry), nil,
EntrySize, nil, DevInfoSize) <> ERROR_BUFFER_TOO_SMALL
then Exit;
Entry := AllocMem(EntrySize); // EntrySize - вот он какой размер
Entry^.dwSize := SizeOf(TRasEntry);
if RasGetEntryProperties(nil, PChar(NameEntry), Entry,
EntrySize, nil, DevInfoSize) = 0 then begin
// далее работаем по плану
// ...
NumAdd := "";
if (Entry^.dwAlternateOffset > 0)
then begin
// тут может надо проверять границы
PDataBa := PByteArray(Entry);
Ofs := Entry^.dwAlternateOffset;
while (StrLen(PChar(PDataBa[Ofs])) > 0) do begin
// гоним все в одну строку, разделяя пробелом
NumAdd := NumAdd + " " + PChar(PDataBa[Ofs]);
Ofs := StrLen(PChar(PDataBa[Ofs])) + 1; // + 1 для #0
end;
end;
end;

P.S.: нужно отладить.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
8-29474
ANubis
2003-08-19 21:10
2004.02.10
Bass.dll описание функции BASS_ChannelGetData


1-29321
webmaster
2004-02-02 02:15
2004.02.10
Как заполнить и отправить html форму на сервер (+прокси)


1-29352
КомофОнСамый
2004-01-28 20:04
2004.02.10
прочитать версию о файле


4-29674
Sword-Fish
2003-12-04 01:46
2004.02.10
Консольное приложение


3-29230
Silver_
2004-01-19 11:09
2004.02.10
Как заставить ADODataSet перещитать вичсляемые поля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский