Старый Vc++6.0 и новые заморочки Ras
Приведу пример: структура RASENTRY в vc++6.0, не имеет добавочных опций - dwfOptions2. Их просто напросто нет в заголовочнике ras.h. Попробовал взять кусок заголовочника из билдера, в котором они есть и влепить в вижаловский. Возникла проблема с WINVER - там стоит директива #if (WINVER >= 0x501) и вижал почему-то упорно считает, что версия меньше указанного числа. Переопределение директивы в своем файле не помогает - выдается куча ошибок при компиляции подключенных заголовочников. Попробовал закомментировать эти директивы. Скомпилировалось, но при выполнении программы выдается ошибка - не удачное выполнение функции RasSetEntryProperties.
Есть варианты решения данной проблемы на 6-ой версии, или это можно обойти только в 7-ой?
ЗЫ В билдере все компилируется и работает на ура, но нужно на VC++.
Блин, поставил седьмой VC и теперь не могу найти, где в нем подключаются lib-ы??? Что-то понакрутили, черт ногу сломит! Пожите чем можИте! :)
Чем #pragma comment( lib, "emapi" ) к примеру не подходит?
Ну а если через саму студию то в solution-explorer щелкин правой конпкой мыши на проекте и в появившемся меню properties->linker->Input->Additional Dependencies сюда и прописывеш доп либы.
Чем #pragma comment( lib, "emapi" ) к примеру не подходит?
Ну а если через саму студию то в solution-explorer щелкин правой конпкой мыши на проекте и в появившемся меню properties->linker->Input->Additional Dependencies сюда и прописывеш доп либы.
Благодарю. Первый вариант - просто не знал, а искать уже не было сил. Второй - не нашел, т.к. щелкал немного не в том месте. В 6-ой версиии это было в главном меню.
Всё! Приехали :). См. тему http://forum.codenet.ru/showthread.php?s=&threadid=26434 В общем - понял в чем там бага. Дело в компиляторе оказывается. Если собирать в VC7, то прога ни в каком исполнении не работает в 2000. Если собрать в 6-ом, то работает, но как я уже писал - в нем нету кое-чего, без чего мне не обойтись. Что можно подправить в 7-ом, что бы он для 2000 нормально собирал? Или в 6-ом, что бы он полноценный был.
В каких опциях копилятора 7 ты сомневаешся. Не знаю,к примеру свои проги я собираю только в 7 и везде они работают. Может выложиш сюда весь проект чтобы его можно было откомпилить в VS7 на XP самому и проверить на 2000.
В каких опциях копилятора 7 ты сомневаешся. Не знаю,к примеру свои проги я собираю только в 7 и везде они работают. Может выложиш сюда весь проект чтобы его можно было откомпилить в VS7 на XP самому и проверить на 2000.
В том то и дело, что не знаю в каких опциях можно сомневаться :)
Весь проект? См. первый пост в теме про ХР & 2k. Это и есть весь код, там WinMain и return не хватает.
Только для надежности лучше выкинуть строчку rasEntry.dwfOptions2=RASEO2_DisableNbtOverIP | RASEO2_ReconnectIfDropped | RASEO2_Internet; или хотя бы флаг RASEO2_DisableNbtOverIP - т.к. в 2000 нет такой галки в св-вах соединения.
Если у тебя заработает на 2000, то вышли мне бинарник, проверю у себя, может винда кривая, хотя проверял уже на 3-х. Т.е. это очень сомнительно. Скорее уже тогда компилятор кривой. Что же там за размер такой не верный? Где его правильно указать в коде?
ЗЫ Собирать пофигу где - я даже 2000-ную дома поставил и в ней собирал. Итог тот же.
vitaly2003s - получилось что-нибудь? Я уже и в Билдере 6-ом собирал - та же ошибка.
Нифига не получилось пока. Но могу сказать одно точно,дело тут не в компиляторе а в оси и функции а точнее передаваемым ей параметрам. Я так думаю проблема заключается в опциях RASENTRY но пока не могу сказать каких,еще попробую,поэксперементирую.
И да кстати ты хочеш сказать что этот же код собраный в VC6 работает?
Нифига не получилось пока. Но могу сказать одно точно,дело тут не в компиляторе а в оси и функции а точнее передаваемым ей параметрам. Я так думаю проблема заключается в опциях RASENTRY но пока не могу сказать каких,еще попробую,поэксперементирую.
Абсолютно солидарен. Уж какие я только опции не пробовал! Если что у тебя получится, то буду безумно рад. Кстати, собирал в 6-ом билдере, такой же результат, вернее его отсутствие. И ошибка естественно та же. У меня уже закралось в мысли дурацкое подозрение, что 2000 просто-напросто не поддерживает программно нужные мне опции. Но, тогда вопрос, почему не работает в VC7 без них и работает в VC6? В общем - мелкомягкие что-то там сами наверное напутали а мне теперь разбираться.
И да кстати ты хочеш сказать что этот же код собраный в VC6 работает?
Не совсем этот: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecomm5/html/wce50sampptpcodesample.asp Т.е. там нету опций dwfOptions2. Но если собрать это в VC7, то не работает. В VC6 - работает.
RASENTRY rasEntry;
memset(&rasEntry, 0, sizeof(RASENTRY));
rasEntry.dwSize = 2088;
rasEntry.dwfOptions = RASEO_PreviewUserPw | RASEO_ShowDialingProgress | RASEO_Custom | RASEO_RequireMsCHAP2;
rasEntry.dwfOptions2=RASEO2_DisableNbtOverIP | RASEO2_ReconnectIfDropped | RASEO2_Internet;
rasEntry.dwRedialCount=99;
rasEntry.dwRedialPause=3;
rasEntry.dwEncryptionType=ET_Optional;
rasEntry.dwType=RASET_Vpn;
rasEntry.dwFramingProtocol=RASFP_Ppp;
rasEntry.dwVpnStrategy=VS_Default;
strcpy(rasEntry.szLocalPhoneNumber, TEXT("ADRES"));
strcpy(rasEntry.szDeviceType, RASDT_Vpn);
strcpy(rasEntry.szDeviceName, TEXT("VPN"));
int ret=RasSetEntryProperties(0, TEXT("VPN"), &rasEntry, 2088, 0, 0);
bool Func(void)
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
int size_of_struct=sizeof(RASENTRY);
// Try calling GetVersionEx using the OSVERSIONINFOEX structure.
// If that fails, try using the OSVERSIONINFO structure.
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
}
// Test for the Windows NT and 2000 product family.
if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
if ( (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) || osvi.dwMajorVersion <= 4)
size_of_struct=2088;
}
else return 0;//error ME,98,95 not provided VPN Connections
RASENTRY rasEntry;
memset(&rasEntry, 0, sizeof(RASENTRY));
rasEntry.dwSize = size_of_struct;
rasEntry.dwfOptions = RASEO_PreviewUserPw | RASEO_ShowDialingProgress | RASEO_Custom | RASEO_RequireMsCHAP2;
rasEntry.dwfOptions2=RASEO2_DisableNbtOverIP | RASEO2_ReconnectIfDropped | RASEO2_Internet;
rasEntry.dwRedialCount=99;
rasEntry.dwRedialPause=3;
rasEntry.dwEncryptionType=ET_Optional;
rasEntry.dwType=RASET_Vpn;
rasEntry.dwFramingProtocol=RASFP_Ppp;
rasEntry.dwVpnStrategy=VS_Default;
strcpy(rasEntry.szLocalPhoneNumber, TEXT("ADRES"));
strcpy(rasEntry.szDeviceType, RASDT_Vpn);
strcpy(rasEntry.szDeviceName, TEXT("VPN"));
int ret=RasSetEntryProperties(0, TEXT("VPN"), &rasEntry, size_of_struct, NULL, 0);
return TRUE;
}
Большое спасибо.
Кстати, rasEntry.dwFramingProtocol=RASFP_Ppp; - это зря. Без него замечтально работает, с ним - наоборот, пункт TCP/IP - остается не отмеченным.
Ну чтож ждем выводов,насчет ключевого момента ты прав это он и есть,а насчет dwFramingProtocol это я так эксперементировал,забыл удалить.