Форум программистов, компьютерный форум CyberForum.ru

boombastiku. Как вытянуть альтернативные номера из адресной книги? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Бьерн Страуструп "Язык программирования С++" http://www.cyberforum.ru/cpp-beginners/thread480283.html
У меня есть книга Бьерна Страуструпа (создателя С++) 'Язык программирования С++' 3-е издание. 991с. Как новая. Но мне она не нужна. Кто живет в Москве - пишите. Отдам за 200р. energi@online.ru Модератору: это не совсем реклама, пожалуйста, не удаляйте мое сообщение.
C++ Oracle client как сервер автоматизации ? Сделал импорт интерфейсов Oracle client в свое приложение и не могу разобраться с интерфейсом. Пробую создать сессию и законнектиться: OleInitialize(NULL); OracleInProcServer::OraSessionPtr sp; sp->GetConnectSession('sergt/s/db01'); Oracle выбрасывает исключение. Помогите, кто знает как работать с этими интерфейсами. Как подсоединиться, как читать и писать данные таблиц? Заранее... http://www.cyberforum.ru/cpp-beginners/thread480250.html
C++ Нужно подключить эти асм модули под С++
У меня есть obj файлы написанные на асме для паскаля.... Мне нужно подключить эти асм модули под С++. Как можно хитро это сделать.... Не охота с паскалем связываться... Описание функций для паскаля есть.
Как добавить чекбокс в первый столбец CListCtrl? C++
Сабж. Сделал CListCtrl в виде Report view, как в первый столбец чекбокс добавить?
C++ В диалоге лист-контрол, как в InitDialog добавить туда столбец? http://www.cyberforum.ru/cpp-beginners/thread480186.html
Сабж. Нарисовал диалог, в нем лист-контрол. Как туда добавить столбец? Понятно что с помощью InsertColumn, а как её заюзать что-то не понимаю... :(
C++ Преобразование типов. Подскажите как правильно преобразовать типы в следующем фрагменте: int i; i=GetKeyboardType(0); reinterpret_cast <char> (i); MessageBox(NULL, imm,'Dialog',MB_OK);Выдается ошибка 'reinterpret_cast' : cannot convert from 'int' to 'char ' подробнее

Показать сообщение отдельно
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
11.11.2009, 01:30     boombastiku. Как вытянуть альтернативные номера из адресной книги?
Что ж, вот и у меня нашлось время помучать Ras функции. AlexFilan, если Вам еще не удалось найти решения, то предлагаю на Ваше обозрение труды моих исследований. Вся магия заключается во флаге dwAlternateOffset и описании из MSDN'a его назначения:

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.

Если честно, я бы убил того кто придумал так хитро оперировать памятью, пришлось извращаться для того чтобы выдернуть эти телефоны из возвращаемой структуры. Ниже приведен код как это делается. Просьба не пугаться макросов _T, типов TCHAR, LPTSTR и команд _tcslen() - просто это старая привычка писать код, который компилируется как в нормальном режиме, так и в Unicode. Если Вы не планируете компилировать под Unicode, то макросы _T('') можно смело удалять TCHAR заменить на char, LPTSTR на LPSTR или даже char*, а команду _tcslen() на strlen().

Например, строка 1. преобразится в строку 2.
Код
1. pAltPhone = (LPTSTR)((DWORD)pAltPhone + (_tcslen(pAltPhone) + 1)*sizeof(TCHAR));
2. pAltPhone = (char*)((DWORD)pAltPhone + strlen(pAltPhone) + 1);
Я использовал afxDump для вывода отладочной информации в Output window во время запуска программы в режиме отладки. Вам же следует использовать извлеченную информацию на свое усмотрение.

Вот полный исходный код моего примера:
[code]
#include <ras.h>
#include <raserror.h>

...

DWORD dwCb = sizeof(RASENTRYNAME);
DWORD dwErr = ERROR_SUCCESS;

// Get Entries
DWORD dwEntryNames = 0;
RASENTRYNAME RasEntryName;
RASENTRYNAME* pRasEntryNames;

RasEntryName.dwSize = sizeof(RASENTRYNAME);
dwErr = RasEnumEntries(NULL, NULL, &RasEntryName, &dwCb, &dwEntryNames);
if (dwEntryNames < 1)
return;

pRasEntryNames = new RASENTRYNAME[dwEntryNames];
pRasEntryNames[0].dwSize = sizeof(RASENTRYNAME);
dwErr = RasEnumEntries(NULL, NULL, pRasEntryNames, &dwCb, &dwEntryNames);

// Loop through entries
if (dwErr == ERROR_SUCCESS)
{
dwCb = sizeof(RASENTRY);
DWORD dwEntryInfoSize = 0;
RASENTRY* pRasEntry;

afxDump << _T('Phone-book entries in the default phone book:

');
for (DWORD i = 0; i < dwEntryNames; i++)
{
// Get Entry Information
dwEntryInfoSize = 0;
dwErr = RasGetEntryProperties(NULL, pRasEntryNames[i].szEntryName, NULL, &dwEntryInfoSize, NULL, NULL);
pRasEntry = (RASENTRY*)new unsigned char[dwEntryInfoSize];
pRasEntry->dwSize = sizeof(RASENTRY);
dwErr = RasGetEntryProperties(NULL, pRasEntryNames[i].szEntryName, pRasEntry, &dwEntryInfoSize, NULL, NULL);

afxDump << pRasEntryNames[i].szEntryName << _T(':') << _T('
');
afxDump << _T(' Phone - ') << pRasEntry->szLocalPhoneNumber << _T('
');

// Loop through alternative phone numbers if such exist (Blimey!!!!)
if (pRasEntry->dwAlternateOffset > 0)
{
LPTSTR pAltPhone = (LPTSTR)((DWORD)pRasEntry + pRasEntry->dwAlternateOffset);
while (_tcslen(pAltPhone) > 0)
{
afxDump << _T(' Alt Phone - ') << pAltPhone
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru