![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Гость_Виктор |
|
|||
|
Unregistered |
Може кто-то помочь с переводом сишного кода на Delphi?
BOOL GetRemoteFile (HINTERNET IN hOpen, TCHAR * IN szUrl, TCHAR * IN szFileName ) { DWORD dwLength, dWritten, dwCode, dwSize; SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, FALSE}; HANDLE hFile; HINTERNET hConnect; BOOL bInitalRequest = TRUE; CHAR *szBuffer; if ( !(hConnect = InternetOpenUrl ( hOpen, szUrl , NULL, 0, INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD, 0) ) ) { ErrorOut (GetLastError (), TEXT ("InternetOpenUrl")); return 0; } again: if (!bInitalRequest) { if ( !HttpSendRequest (hConnect, NULL,0,NULL, 0)) { ErrorOut (GetLastError(), "HttpSendRequest"); return FALSE; } } dwSize = sizeof (dwCode); if ( !InternetQueryOption (hConnect, INTERNET_OPTION_HANDLE_TYPE , &dwCode, &dwSize)) { ErrorOut (GetLastError(), "HttpQueryInfo"); return FALSE; } if ( (dwCode == INTERNET_HANDLE_TYPE_HTTP_REQUEST ) || (dwCode == INTERNET_HANDLE_TYPE_CONNECT_HTTP ) ) { // if were are here, it means that we use HTTP to talk the proxy dwSize = sizeof (DWORD) ; if ( !HttpQueryInfo (hConnect, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwSize, NULL)) { ErrorOut (GetLastError(), "HttpQueryInfo"); return FALSE; } if ( dwCode == HTTP_STATUS_PROXY_AUTH_REQ) { if (!InternetQueryDataAvailable (hConnect, &dwLength, 0,0) ) { ErrorOut (GetLastError (), "InternetQueryDataAvailable"); return FALSE; } szBuffer = new CHAR [dwLength]; // read all the data and ignore it do { InternetReadFile (hConnect, szBuffer, dwLength, &dwSize); } while (dwSize != 0); delete [] szBuffer; if (!bUI) { // This is a secure page. cerr << "Proxy authentication is required." << endl; CHAR szUser[50]=""; CHAR szPass[50]=""; cerr << "User: "; cin >> szUser; cerr << "Pass: "; cin >> szPass; if ( !InternetSetOption (hConnect, INTERNET_OPTION_PROXY_USERNAME, (LPVOID) szUser, lstrlen (szUser) )) { cerr << "InternetSetOptionFailed: " << GetLastError() << endl; return FALSE; } if ( !InternetSetOption (hConnect, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID) szPass, lstrlen (szPass) )) { cerr << "InternetSetOptionFailed: " << GetLastError() << endl; return FALSE; } bInitalRequest = FALSE; goto again; } else { if ( InternetErrorDlg (GetDesktopWindow(), hConnect, ERROR_INTERNET_INCORRECT_PASSWORD, FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL) == ERROR_INTERNET_FORCE_RETRY) { bInitalRequest = FALSE; goto again; } } // else } // if ( dwCode == HTTP_STATUS_PROXY_AUTH_REQ } // if ( (dwCode == INTERNET_HANDLE_TYPE_HTTP_REQUEST if ( (hFile = CreateFile (szFileName, GENERIC_WRITE, FILE_SHARE_READ, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ) == INVALID_HANDLE_VALUE) { cerr << "Can't open file file: " << szFileName << endl; return FALSE; } if (!InternetQueryDataAvailable (hConnect, &dwLength, 0,0) ) { ErrorOut (GetLastError (), "InternetQueryDataAvailable"); return FALSE; } szBuffer = new CHAR [dwLength]; do { if (!InternetReadFile (hConnect, szBuffer, dwLength, &dWritten) ) { CloseHandle (hFile); ErrorOut (GetLastError (), "InternetReadFile"); delete [] szBuffer; return FALSE; } if (!dWritten) break; else if (!WriteFile(hFile, szBuffer, dWritten , &dwSize, NULL)) { CloseHandle (hFile); cerr << "error " << GetLastError () << endl; delete [] szBuffer; return FALSE; } } while (TRUE); FlushFileBuffers (hFile); CloseHandle (hFile); delete [] szBuffer; return 1; } |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Тебе именно прога нужна или функции этого кода? Если функции, то сделай dll, а там в делфе её используй.
|
|||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
Тут я смотрю апишные ф-ии кое-где есть, так от в дельфях они тоже есть, посмотри в хелпах
-------------------- --- |
|||
|
||||
| Гость_Виктор |
|
|||
|
Unregistered |
Проблемы с некоторыми типами,структурами...
Например : SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, FALSE}; Как в делфи описать...? Вот с этим у меня проблемы... |
|||
|
||||
| <Spawn> |
|
||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
в Дельфи определена уже эта SECURITY_ATTRIBUTES. Загляни в Windows.pas:
Тогда это все преобразуется в такой код:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||
|
|||||
| Гость_Виктор |
|
|||
|
Unregistered |
Спасибо, <Spawn>... Попробую
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Я тебе перевел до bUI, т.к. эта переменная тут неопределена.
Это сообщение отредактировал(а) <Spawn> - 25.12.2003, 14:50 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Гость_Виктор |
|
|||
|
Unregistered |
<Spawn>
Еще раз спасибо. если не трудно помоги еще вот с этим... 1) ....(LPVOID) szUser, lstrlen (szUser)); 2) if ( InternetErrorDlg (GetDesktopWindow(), hConnect, ERROR_INTERNET_INCORRECT_PASSWORD, FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL) == ERROR_INTERNET_FORCE_RETRY) Я пробовал вот-так if InternetErrorDlg(GetDesktopWindow(), hConnect, ERROR_INTERNET_INCORRECT_PASSWORD, FLAGS_ERROR_UI_FILTER_FOR_ERRORS or FLAGS_ERROR_UI_FLAGS_GENERATE_DATA or FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, nil) = error_internet_force_retry then [Error] Unit1.pas(544): Types of actual and formal var para meters must be identical |
|||
|
||||
| <Spawn> |
|
||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
1)
2) Необходимо передать параметр по ссылке
Это сообщение отредактировал(а) <Spawn> - 25.12.2003, 18:52 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||
|
|||||
| Гость_Viktor |
|
|||
|
Unregistered |
<Spawn> Что я неправильно делаю? if not (WriteFile(hFile, szBuffer,dWritten, @dwSize, nil)) then .... [Error] Unit1.pas(554): Types of actual and formal var parameters must be identical |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Не нужно использовать оператор взятия адреса. Там необходимо передать значение по ссылке(var ...).
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Гость_Viktor |
|
|||
|
Unregistered |
Понял, спасибо <Spawn>
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |