Формат переменной
Есть код создания подключения VPN логин должен браться из Edit так же как и пароль но не принимает не могу понять в какой формат нужно перевести
вот код:
RASDIALPARAMS res;
HRASCONN hRasConn = NULL;
memset(&rasEntry, 0, sizeof(RASENTRY));
memset(&res, 0, sizeof(RASDIALPARAMS));
res.dwSize = sizeof(res);
rasEntry.dwSize = sizeof(rasEntry);
rasEntry.dwfOptions = RASEO_PreviewUserPw | RASEO_ShowDialingProgress | RASEO_Custom | RASEO_RequireMsCHAP2 | RASEO_RemoteDefaultGateway ;
rasEntry.dwfOptions2=RASEO2_DisableNbtOverIP| RASEO2_ReconnectIfDropped | RASEO2_Internet;
rasEntry.dwfNetProtocols = RASNP_Ip;
rasEntry.dwRedialCount=99999;
rasEntry.dwRedialPause=3;
rasEntry.dwEncryptionType=ET_None;
rasEntry.dwType=RASET_Vpn;
rasEntry.dwVpnStrategy=VS_PptpFirst;
strcpy(rasEntry.szLocalPhoneNumber, TEXT("195.66.60.253"));
strcpy(rasEntry.szDeviceType, RASDT_Vpn);
strcpy(rasEntry.szDeviceName, TEXT("over3g"));
strcpy(res.szEntryName, TEXT("over3g"));
strcpy(res.szUserName, TEXT(Edit1->Text));
strcpy(res.szPassword, TEXT("Ytrewq32111"));
BOOL PwdDetected = false;
Вот что пишет билдер:
[BCC32 Error] Unit1.cpp(46): E2034 Cannot convert 'UnicodeString' to 'const char *'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[BCC32 Error] Unit1.cpp(46): E2342 Type mismatch in parameter '__src' (wanted 'const char *', got 'UnicodeString')
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[BCC32 Warning] Unit1.cpp(72): W8004 'PwdDetected' is assigned a value that is never used
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Все равно ошибку пишет :)
[BCC32 Error] Unit1.cpp(48): E2034 Cannot convert 'wchar_t *' to 'const char *'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Бле ну тогда так:
#pragma comment(lib, “rasapi32.lib”)
void createvpn(const wchar_t* name, const wchar_t* server, const wchar_t* username, const wchar_t* password, const wchar_t* psk)
{
DWORD size = 0;
RasGetEntryProperties(NULL, L“”, NULL, &size, NULL, NULL);
LPRASENTRY pras = (LPRASENTRY)malloc(size);
memset(pras, 0, size);
pras->dwSize = size;
pras->dwType = RASET_Vpn;
pras->dwRedialCount = 1;
pras->dwRedialPause = 60;
pras->dwfNetProtocols = RASNP_Ip;
pras->dwEncryptionType = ET_Optional;
wcscpy_s(pras->szLocalPhoneNumber, server);
wcscpy_s(pras->szDeviceType, RASDT_Vpn);
pras->dwfOptions = RASEO_RemoteDefaultGateway;
pras->dwVpnStrategy = VS_L2tpOnly;
pras->dwfOptions |= RASEO_RequireEncryptedPw;
pras->dwfOptions2 |= RASEO2_UsePreSharedKey;
RasSetEntryProperties(NULL, name, pras, pras->dwSize, NULL, 0);
RASCREDENTIALS ras_cre = {0};
ras_cre.dwSize = sizeof(ras_cre);
ras_cre.dwMask = RASCM_UserName | RASCM_Password;
wcscpy_s(ras_cre.szUserName, username);
wcscpy_s(ras_cre.szPassword, password);
RasSetCredentials(NULL, name, &ras_cre, FALSE);
RASCREDENTIALS ras_cre_psk = {0};
ras_cre_psk.dwSize = sizeof(ras_cre_psk);
ras_cre_psk.dwMask = RASCM_PreSharedKey;
wcscpy_s(ras_cre_psk.szPassword, psk);
RasSetCredentials(NULL, name, &ras_cre_psk, FALSE);
free(pras);
}
не принимает.
[BCC32 Error] Unit1.cpp(48): E2034 Cannot convert 'wchar_t *' to 'const char *'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
[BCC32 Error] Unit1.cpp(48): E2342 Type mismatch in parameter '__src' (wanted 'const char *', got 'wchar_t *')
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Все равно ошибку пишет :)
[BCC32 Error] Unit1.cpp(48): E2034 Cannot convert 'wchar_t *' to 'const char *'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Все равно ошибку пишет :)
[BCC32 Error] Unit1.cpp(48): E2034 Cannot convert 'wchar_t *' to 'const char *'
Full parser context
Unit1.cpp(20): parsing: void _fastcall TForm1::Button1Click(TObject *)
Бле ну тогда так:
О чудо))) сканало, у меня 2010 билдер.
Слушай а ты не знаешь как указать ключ для проверки подлиности подключения L2tp?
В свойствах VPN вкладка безопастность , потом кнопка вверху дополнительные параметры и там можно указать ключ, весь msdn уже перерыл, не могу найти этот параметр
Да, уже нашел, но не могу понять как занести данные нашел что через RASCM_PreSharedKey
В общем заполнил структуру RASCREDENTIALS, параметр RASCM_PreSharedKey находится в dwMask, как его указать?
Вот код:
RASDIALPARAMS res;
RASCREDENTIALSA rec;
HRASCONN hRasConn = NULL;
memset(&rasEntry, 0, sizeof(RASENTRY));
memset(&res, 0, sizeof(RASDIALPARAMS));
memset(&rec, 0, sizeof(RASCREDENTIALSA));
rec.dwSize = sizeof(rec);
res.dwSize = sizeof(res);
rasEntry.dwSize = sizeof(rasEntry);
rasEntry.dwfOptions = RASEO_PreviewUserPw | RASEO_ShowDialingProgress | RASEO_Custom | RASEO_RequireMsCHAP2 | RASEO_RemoteDefaultGateway |RASEO_RequireMsEncryptedPw ;
rasEntry.dwfOptions2=RASEO2_DisableNbtOverIP| RASEO2_ReconnectIfDropped | RASEO2_UsePreSharedKey | RASEO2_Internet;
rasEntry.dwfNetProtocols = RASNP_Ip;
rasEntry.dwRedialCount=99999;
rasEntry.dwRedialPause=3;
rasEntry.dwEncryptionType=ET_Require;
rasEntry.dwType=RASET_Vpn;
rasEntry.dwVpnStrategy=VS_L2tpOnly;
rec.dwMask=RASCM_Password;
strcpy(rec.szPassword,TEXT("password"));
strcpy(rasEntry.szLocalPhoneNumber, TEXT("over3g.ru"));
strcpy(rasEntry.szDeviceType, RASDT_Vpn);
strcpy(rasEntry.szDeviceName, TEXT("over3g"));
strcpy(res.szEntryName, TEXT("over3g"));
strcpy(res.szUserName, AnsiString(Edit1->Text).c_str());
strcpy(res.szPassword, AnsiString(Edit2->Text).c_str());
BOOL PwdDetected = false;
if (RasSetEntryProperties(NULL, TEXT("over3g4"), &rasEntry, sizeof(rasEntry), NULL, 0))
{
MessageBox(0,"RasSetEntryProperties failed", 0,0);
}
else MessageBox(0,"Создано VPN соединение over3g","Ok",0);
if (RasSetEntryDialParams(NULL,&res,false))
{
MessageBox(0,"RasSetEntryDialParams", 0,0);
}
else MessageBox(0,"Отредактировано","Ok",0);
RasDial(0, 0, &res, NULL, NULL, &hRasConn);
rec.dwMask=RASCM_Password;
strcpy(rec.szPassword,TEXT("password"));
Указал вот так, не знаю правильно нет, но ключ не появляется в VPN
rec.dwMask=RASCM_Password;
strcpy(rec.szPassword,TEXT("password"));
strcpy(rec.szPassword,TEXT("password"));
Указал вот так, не знаю правильно нет, но ключ не появляется в VPN
rec.dwMask=RASCM_Password;
strcpy(rec.szPassword,TEXT("password"));
strcpy(rec.szPassword,TEXT("password"));
Пробовал не канает, не задается пасс. Если выбираем в качестве маски RASCM_PreSharedKey то параметры RASCREDENTIALSA rec будут принадлежать опции RASCM_PreSharedKey?
Ок, Сделал, но он гад все равно не добавляется(((
RASDIALPARAMS res;
RASCREDENTIALSA rec;
HRASCONN hRasConn = NULL;
memset(&rasEntry, 0, sizeof(RASENTRY));
memset(&res, 0, sizeof(RASDIALPARAMS));
memset(&rec, 0, sizeof(RASCREDENTIALSA));
rec.dwSize = sizeof(rec);
res.dwSize = sizeof(res);
rasEntry.dwSize = sizeof(rasEntry);
rasEntry.dwfOptions = RASEO_PreviewUserPw | RASEO_ShowDialingProgress | RASEO_Custom | RASEO_RequireMsCHAP2 | RASEO_RemoteDefaultGateway |RASEO_RequireMsEncryptedPw ;
rasEntry.dwfOptions2=RASEO2_DisableNbtOverIP| RASEO2_ReconnectIfDropped | RASEO2_UsePreSharedKey | RASEO2_Internet;
rasEntry.dwfNetProtocols = RASNP_Ip;
rasEntry.dwRedialCount=99999;
rasEntry.dwRedialPause=3;
rasEntry.dwEncryptionType=ET_Require;
rasEntry.dwType=RASET_Vpn;
rasEntry.dwVpnStrategy=VS_L2tpOnly;
rec.dwMask=RASCM_DDMPreSharedKey;
strcpy(rec.szPassword, TEXT("password"));
strcpy(rasEntry.szLocalPhoneNumber, TEXT("over3g.ru"));
strcpy(rasEntry.szDeviceType, RASDT_Vpn);
strcpy(rasEntry.szDeviceName, TEXT("over3g"));
strcpy(res.szEntryName, TEXT("over3g"));
strcpy(res.szUserName, AnsiString(Edit1->Text).c_str());
strcpy(res.szPassword, AnsiString(Edit2->Text).c_str());
BOOL PwdDetected = false;
if (RasSetEntryProperties(NULL, TEXT("over3g4"), &rasEntry, sizeof(rasEntry), NULL, 0))
{
MessageBox(0,"RasSetEntryProperties failed", 0,0);
}
else MessageBox(0,"Создано VPN соединение over3g","Ok",0);
if (RasSetEntryDialParams(NULL,&res,false))
{
MessageBox(0,"RasSetEntryDialParams", 0,0);
}
else MessageBox(0,"Отредактировано","Ok",0);
if (RasSetCredentials(NULL,TEXT("Password"),&rec,false))
{
ShowMessage("ggg");
}
else
{
ShowMessage("Сканало!");
}
RasDial(0, 0, &res, NULL, NULL, &hRasConn);