доступ к Ftp из консольного приложения
Подскажите как реализовать достук к FTP из консольного приложения?
Компонентами не пробовал пользоваться? TNMFTP?
компонентом не пробовал, но вот так пробовал:
hWinInet = LoadLibrary("WinInet.dll");
if (!hWinInet)
return false;
ругается на HINSTANCE, подключаю wininet.h, потом на LPVOID ругается, подключаю windef.h, и потом еще на что-то ругается, динамически dll в консольном приложении вообще подключать можно?
компонентом не пробовал, но вот так пробовал:
hWinInet = LoadLibrary("WinInet.dll");
if (!hWinInet)
return false;
ругается на HINSTANCE, подключаю wininet.h, потом на LPVOID ругается, подключаю windef.h, и потом еще на что-то ругается, динамически dll в консольном приложении вообще подключать можно?
Можно, только не забудь подключить виндовые заголовки.
Можно, только не забудь подключить виндовые заголовки.
Я тебя не понял, это какие? :(
Я тебя не понял, это какие? :(
Во первых, проверь, что твое косольное приложение содержит библиотеку kernel.lib - она нужна для вызова loadlibrary и им подобным. Я просто не помню - линкуется ли она автоматом для консоли. Второе - должен быть обязательно подключен windows.h. Третье - wininet.h - подключается тогда, когда библиотека линкуется статически - если библиотека грузится динамически, смысла особого в этом нет. Ты все равно должен объявить прототипы функций в своей проге.
Во первых, проверь, что твое косольное приложение содержит библиотеку kernel.lib - она нужна для вызова loadlibrary и им подобным. Я просто не помню - линкуется ли она автоматом для консоли. Второе - должен быть обязательно подключен windows.h. Третье - wininet.h - подключается тогда, когда библиотека линкуется статически - если библиотека грузится динамически, смысла особого в этом нет. Ты все равно должен объявить прототипы функций в своей проге.
подключил windows.h и ошибки на загрузке библиотеки не выдает (LoadLibrary()), но выдает ошибку вот здесь:
INTERNET_PORT, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD_PTR);
пишет: , expected
что к чему?
Добрый вечер!
Подскажите как реализовать достук к FTP из консольного приложения?
спасибо конечно, но так я и сам могу, надобно динамически библиотеку подключить!
спасибо конечно, но так я и сам могу, надобно динамически библиотеку подключить!
Зачем?
Зачем?
а зачем вообще нужно динамическое подключение dll?
подключил windows.h и ошибки на загрузке библиотеки не выдает (LoadLibrary()), но выдает ошибку вот здесь:
INTERNET_PORT, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD_PTR);
пишет: , expected
что к чему?
Х... знает. Проверь параметры.
Х... знает. Проверь параметры.
а что проверять то, я взял этот код из рабочей проги но не консольной, там все работает, тут вот ента ошибка вылетает!
вот какой эксперимент провел:
hWinInet = LoadLibrary("wininet.dll");
typedef HINTERNET (__import * fInternetConnect(
HINTERNET hInternet,
LPCTSTR lpszServerName,
INTERNET_PORT nServerPort,
LPCTSTR lpszUsername,
LPCTSTR lpszPassword,
DWORD dwService,
DWORD dwFlags,
DWORD_PTR dwContext
));
в обычном приложении работает, а в консольном нет! В чем может быть дело?
а что проверять то, я взял этот код из рабочей проги но не консольной, там все работает, тут вот ента ошибка вылетает!
Блин, ну как хочется что б ну все за нас сделали и все проблемы решили...
Ну посмотреть - где объявлен тип INTERNET - слабо дитя? Или тебе надо мало тебе разжевать, надо еще и в рот положить? Ламер. Все нормально работает. Читай то что тебе пишут.
а зачем вообще нужно динамическое подключение dll?
Т.е под мастера закосить хочешь, прогу поменьше геммороя побольше:)? Ну ладно тогда поехали:
подключил windows.h и ошибки на загрузке библиотеки не выдает (LoadLibrary()), но выдает ошибку вот здесь:
INTERNET_PORT, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD_PTR);
пишет: , expected
что к чему?
1. В окне сообщений - select E2257, expect - пресс F1(это быстрее и не является неразрешимой задачей, чтоб форум засорять...).
2. Совет № 3 от _kot:
- "Третье - wininet.h - подключается тогда, когда библиотека линкуется статически - если библиотека грузится динамически, смысла особого в этом нет. Ты все равно должен объявить прототипы функций в своей проге." - неудачный, а как Вы думаете как Билдер догадается, что такое HINTERNET, INTERNET_PORT? Никак, на что он тебе тонко намекает сообщением E2257. А вот это Ты собрался втупую переписывать?
//cut from <wininet.h>
...
#define INTERNET_INVALID_PORT_NUMBER 0 // use the protocol-specific default
#define INTERNET_DEFAULT_FTP_PORT 21 // default for FTP servers
#define INTERNET_DEFAULT_GOPHER_PORT 70 // " " gopher "
#define INTERNET_DEFAULT_HTTP_PORT 80 // " " HTTP "
#define INTERNET_DEFAULT_HTTPS_PORT 443 // " " HTTPS "
#define INTERNET_DEFAULT_SOCKS_PORT 1080 // default for SOCKS firewall servers.
...
так, что <wininet.h> Ты все таки включи.
Блин, ну как хочется что б ну все за нас сделали и все проблемы решили...
Ну посмотреть - где объявлен тип INTERNET - слабо дитя? Или тебе надо мало тебе разжевать, надо еще и в рот положить? Ламер. Все нормально работает. Читай то что тебе пишут.
посмотрел, действительно wininet.h подключить забыл, и сам ты Ламер. :)
Gizmo
спасибо, инет у меня медленный, сообщение сначала свое отправил, потом твое увидел, а вот насчет совета kot_, он то меня и подвел, не стал я его подключать, раз он мне сказал, что при динамическом подключении он не нужен.
А динамически библиотеку я подключаю, потому что если данной библиотеки на машине пользователя вдруг не окажется, то прога моя работать все равно будет, а при статическом подключении ругнется и отвалится, если я не ошибаюсь.
злые Вы какие-то.
...
спасибо, инет у меня медленный, сообщение сначала свое отправил, потом твое увидел, а вот насчет совета kot_, он то меня и подвел, не стал я его подключать, раз он мне сказал, что при динамическом подключении он не нужен.
Да уж развел тебя _kot как ... не буду, но зато смешно получилось. Да Мы не злые пости еще. Сам Я с wininet не работал (плотно не работал), так что разберемся!
А динамически библиотеку я подключаю, потому что если данной библиотеки на машине пользователя вдруг не окажется, то прога моя работать все равно будет, а при статическом подключении ругнется и отвалится, если я не ошибаюсь.
злые Вы какие-то.
ошибаешся, Windows без wininet.dll - НЕ БЫВАЕТ, это Я тебе как опытный user говорю. Функции из WinInet использует САМ - IE! Окошечко ввода имени и пароля юзера видел? Это - InternetErrorDlg...
ошибаешся, Windows без wininet.dll - НЕ БЫВАЕТ, это Я тебе как опытный user говорю. Функции из WinInet использует САМ - IE! Окошечко ввода имени и пароля юзера видел? Это - InternetErrorDlg...
вот это уже интересно, этого я не знал, ну тогда другие аргументы в пользу динамического подключения:
1. Грузится приложение быстрее, для меня это критично (хотя сам, если честно ни разу не проверял)
2. Мое приложение может функционировать и без этой dll, т.е. основной функционал приложения заложен не в доступе к ftp.
вот.
вот это уже интересно, этого я не знал, ну тогда другие аргументы в пользу динамического подключения:
1. Грузится приложение быстрее, для меня это критично (хотя сам, если честно ни разу не проверял)
2. Мое приложение может функционировать и без этой dll, т.е. основной функционал приложения заложен не в доступе к ftp.
вот.
Приложение будет грузится быстрее только в том случае если загрузка нужной длл происходит не в момент загрузки приложения...:)
И видоуз без нее тож бывает. Другое дело что это сейчас бывает редко. А вообще библиотека появилась на сервиспаке для 95.
1. Грузится приложение быстрее, для меня это критично (хотя сам, если честно ни разу не проверял)
Да, но функция где идет доступ к FTP выполняется медленней + надо сделать(не забыть сделать!) FreeLibrary. Критично будет если это обращение будет частым. Если редко, то базара нет.
Да, но функция где идет доступ к FTP выполняется медленней + надо сделать(не забыть сделать!) FreeLibrary. Критично будет если это обращение будет частым. Если редко, то базара нет.
А можно грузить при первом обращении, а освобождать при завершении программы, если уж настолько скорость критична.
А можно грузить при первом обращении, а освобождать при завершении программы, если уж настолько скорость критична.
всегда так и делаю :)
всегда так и делаю :)
Так вот Я тебе и говорю, что в этом случае никакого выигрыша нет, а лишний код писать надо.
Если бы тебе нужно было изредка обращатся к FTP (где то по ходу программы), то это было бы обосновано - dll-ка в памяти не висит, загрузил, отработал выгрузил. А так, что система ее загрузит, что Ты одна фигня и висит всю дорогу в памяти. К тоиу же вряд-ли код LoadLibrary отличается от того, что использует система. Если Я не прав пусть меня поправят профи.
Так вот Я тебе и говорю, что в этом случае никакого выигрыша нет, а лишний код писать надо.
Если бы тебе нужно было изредка обращатся к FTP (где то по ходу программы), то это было бы обосновано - dll-ка в памяти не висит, загрузил, отработал выгрузил. А так, что система ее загрузит, что Ты одна фигня и висит всю дорогу в памяти. К тоиу же вряд-ли код LoadLibrary отличается от того, что использует система. Если Я не прав пусть меня поправят профи.
вот ты сам и сказал, я изредка буду к ftp обращаться мне не надо чтоб эта dll постоянно в памяти сидела! у меня приложение будет работать и в зависимости от заданных параметров обращаться иногда, а может быть и никогда к ftp, вот.
вот ты сам и сказал, я изредка буду к ftp обращаться мне не надо чтоб эта dll постоянно в памяти сидела! у меня приложение будет работать и в зависимости от заданных параметров обращаться иногда, а может быть и никогда к ftp, вот.
- Мальчик тебя как зовут?
- Молчит.
- Ты, что тормоз?
- Вова.
- А чего молчишь?
- Я не тормоз.
Ну торможу с утра, не проснулся. "ПРИ ОБРАЩЕНИИ, а НЕ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ".
- Мальчик тебя как зовут?
- Молчит.
- Ты, что тормоз?
- Вова.
- А чего молчишь?
- Я не тормоз.
Ну торможу с утра, не проснулся. "ПРИ ОБРАЩЕНИИ, а НЕ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ".
сам ты тормоз! :)
когда программа начнет работать с ftp тогда и будет происходить загрузка dll (епть слов на Вас не хватает), а если уж начали работать с ftp, то при завершении проги выгрузка dll.
а ты GIZMO пойми, что если она, программа, с ftp "сегодня" работать не будет то грузить ее на кой???!!!!!
специально для таких "профессионалов" как ты:
"Статическое связывание означает, что DLL загружается сразу, как только начинает выполняться приложение, которое будет ее использовать." ЗНАЧИТ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ, dll эта будет в память грузиться "тормоз".
"Динамическое связывание отличается от статического тем, что библиотека DLL загружается только в тот момент, когда необходимо выполнить какую-то хранящуюся в ней функцию." А при таком использовании только когда буду ftp обращаться, тормоз. "Программирование в С++ Builder 6" А.Я. Архангельский. Млять куча профи один я такой. Ты чем анекдоты копировать, лучше из книжек цитировал.
Все равно спасибо всем.
сам ты тормоз! :)
когда программа начнет работать с ftp тогда и будет происходить загрузка dll (епть слов на Вас не хватает), а если уж начали работать с ftp, то при завершении проги выгрузка dll.
а ты GIZMO пойми, что если она, программа, с ftp "сегодня" работать не будет то грузить ее на кой???!!!!!
специально для таких "профессионалов" как ты:
"Статическое связывание означает, что DLL загружается сразу, как только начинает выполняться приложение, которое будет ее использовать." ЗНАЧИТ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ, dll эта будет в память грузиться "тормоз".
"Динамическое связывание отличается от статического тем, что библиотека DLL загружается только в тот момент, когда необходимо выполнить какую-то хранящуюся в ней функцию." А при таком использовании только когда буду ftp обращаться, тормоз. "Программирование в С++ Builder 6" А.Я. Архангельский. Млять куча профи один я такой. Ты чем анекдоты копировать, лучше из книжек цитировал.
Все равно спасибо всем.
Дак тормоз это Я про себя. Я не профи, подпись видишь USER. Книги Архангельского читать не стоит. он тоже тормоз.
"Статическое связывание означает, что DLL загружается сразу, как только начинает выполняться приложение, которое будет ее использовать." ЗНАЧИТ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ, dll эта будет в память грузиться "тормоз".
"Динамическое связывание отличается от статического тем, что библиотека DLL загружается только в тот момент, когда необходимо выполнить какую-то хранящуюся в ней функцию." А при таком использовании только когда буду ftp обращаться, тормоз. "Программирование в С++ Builder 6" А.Я. Архангельский.
Кстати, это ровным счетом ничего не означает. Уверен (хотя проверить нечем), что в 2000/XP в числе прочих оптимизаций загрузки программ была сделана и фактическая загрузка DLL в память при первом обращении к соответствующей функции, on demand, так сказать, как делается в Java и .NET. Правда, для соответствия старым версиям API да, ничего не изменилось, и проверка присутствия соответствующей DLL в системе делается при загрузке программы. Собственно, и завязываться на подобную отложенную загрузку особенно нельзя, тем более, если программа рассчитана на работу в любой версии Windows.
Следовательно, использованные решения с ручной загрузкой по требованию можно признать верными. :D
Дак тормоз это Я про себя. Я не профи, подпись видишь USER. Книги Архангельского читать не стоит. он тоже тормоз.
ну если ты про себя, тогда забираю свои слова обратно, ну про тормоза :)