Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

доступ к Ftp из консольного приложения

335
01 сентября 2005 года
enola
379 / / 25.01.2005
Добрый вечер!
Подскажите как реализовать достук к FTP из консольного приложения?
310
01 сентября 2005 года
fellow
853 / / 17.03.2003
Компонентами не пробовал пользоваться? TNMFTP?
335
01 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by fellow
Компонентами не пробовал пользоваться? TNMFTP?



компонентом не пробовал, но вот так пробовал:

 
Код:
HINSTANCE hWinInet;

    hWinInet = LoadLibrary("WinInet.dll");
    if (!hWinInet)
        return false;


ругается на HINSTANCE, подключаю wininet.h, потом на LPVOID ругается, подключаю windef.h, и потом еще на что-то ругается, динамически dll в консольном приложении вообще подключать можно?
1
01 сентября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
компонентом не пробовал, но вот так пробовал:

 
Код:
HINSTANCE hWinInet;

    hWinInet = LoadLibrary("WinInet.dll");
    if (!hWinInet)
        return false;


ругается на HINSTANCE, подключаю wininet.h, потом на LPVOID ругается, подключаю windef.h, и потом еще на что-то ругается, динамически dll в консольном приложении вообще подключать можно?


Можно, только не забудь подключить виндовые заголовки.

335
01 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
Можно, только не забудь подключить виндовые заголовки.



Я тебя не понял, это какие? :(

1
02 сентября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
Я тебя не понял, это какие? :(


Во первых, проверь, что твое косольное приложение содержит библиотеку kernel.lib - она нужна для вызова loadlibrary и им подобным. Я просто не помню - линкуется ли она автоматом для консоли. Второе - должен быть обязательно подключен windows.h. Третье - wininet.h - подключается тогда, когда библиотека линкуется статически - если библиотека грузится динамически, смысла особого в этом нет. Ты все равно должен объявить прототипы функций в своей проге.

335
02 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
Во первых, проверь, что твое косольное приложение содержит библиотеку kernel.lib - она нужна для вызова loadlibrary и им подобным. Я просто не помню - линкуется ли она автоматом для консоли. Второе - должен быть обязательно подключен windows.h. Третье - wininet.h - подключается тогда, когда библиотека линкуется статически - если библиотека грузится динамически, смысла особого в этом нет. Ты все равно должен объявить прототипы функций в своей проге.



подключил windows.h и ошибки на загрузке библиотеки не выдает (LoadLibrary()), но выдает ошибку вот здесь:

 
Код:
typedef HINTERNET (__stdcall  *pInternetConnect)(HINTERNET, LPCTSTR,
        INTERNET_PORT, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD_PTR);


пишет: , expected
что к чему?
246
02 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
Добрый вечер!
Подскажите как реализовать достук к FTP из консольного приложения?

335
02 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO



спасибо конечно, но так я и сам могу, надобно динамически библиотеку подключить!

246
02 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
спасибо конечно, но так я и сам могу, надобно динамически библиотеку подключить!


Зачем?

335
02 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO
Зачем?



а зачем вообще нужно динамическое подключение dll?

1
02 сентября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
подключил windows.h и ошибки на загрузке библиотеки не выдает (LoadLibrary()), но выдает ошибку вот здесь:
 
Код:
typedef HINTERNET (__stdcall  *pInternetConnect)(HINTERNET, LPCTSTR,
        INTERNET_PORT, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD_PTR);


пишет: , expected
что к чему?


Х... знает. Проверь параметры.

335
02 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
Х... знает. Проверь параметры.



а что проверять то, я взял этот код из рабочей проги но не консольной, там все работает, тут вот ента ошибка вылетает!

вот какой эксперимент провел:

Код:
HINSTANCE hWinInet;

    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
    ));


в обычном приложении работает, а в консольном нет! В чем может быть дело?
1
02 сентября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
а что проверять то, я взял этот код из рабочей проги но не консольной, там все работает, тут вот ента ошибка вылетает!


Блин, ну как хочется что б ну все за нас сделали и все проблемы решили...
Ну посмотреть - где объявлен тип INTERNET - слабо дитя? Или тебе надо мало тебе разжевать, надо еще и в рот положить? Ламер. Все нормально работает. Читай то что тебе пишут.

246
02 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
а зачем вообще нужно динамическое подключение dll?


Т.е под мастера закосить хочешь, прогу поменьше геммороя побольше:)? Ну ладно тогда поехали:

Цитата:
Originally posted by enola
подключил windows.h и ошибки на загрузке библиотеки не выдает (LoadLibrary()), но выдает ошибку вот здесь:
 
Код:
typedef HINTERNET (__stdcall  *pInternetConnect)(HINTERNET, LPCTSTR,
        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> Ты все таки включи.

335
02 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by kot_
Блин, ну как хочется что б ну все за нас сделали и все проблемы решили...
Ну посмотреть - где объявлен тип INTERNET - слабо дитя? Или тебе надо мало тебе разжевать, надо еще и в рот положить? Ламер. Все нормально работает. Читай то что тебе пишут.



посмотрел, действительно wininet.h подключить забыл, и сам ты Ламер. :)

Gizmo
спасибо, инет у меня медленный, сообщение сначала свое отправил, потом твое увидел, а вот насчет совета kot_, он то меня и подвел, не стал я его подключать, раз он мне сказал, что при динамическом подключении он не нужен.
А динамически библиотеку я подключаю, потому что если данной библиотеки на машине пользователя вдруг не окажется, то прога моя работать все равно будет, а при статическом подключении ругнется и отвалится, если я не ошибаюсь.
злые Вы какие-то.

246
02 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola

...
спасибо, инет у меня медленный, сообщение сначала свое отправил, потом твое увидел, а вот насчет совета kot_, он то меня и подвел, не стал я его подключать, раз он мне сказал, что при динамическом подключении он не нужен.


Да уж развел тебя _kot как ... не буду, но зато смешно получилось. Да Мы не злые пости еще. Сам Я с wininet не работал (плотно не работал), так что разберемся!

Цитата:
Originally posted by enola

А динамически библиотеку я подключаю, потому что если данной библиотеки на машине пользователя вдруг не окажется, то прога моя работать все равно будет, а при статическом подключении ругнется и отвалится, если я не ошибаюсь.
злые Вы какие-то.


ошибаешся, Windows без wininet.dll - НЕ БЫВАЕТ, это Я тебе как опытный user говорю. Функции из WinInet использует САМ - IE! Окошечко ввода имени и пароля юзера видел? Это - InternetErrorDlg...

335
02 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO
ошибаешся, Windows без wininet.dll - НЕ БЫВАЕТ, это Я тебе как опытный user говорю. Функции из WinInet использует САМ - IE! Окошечко ввода имени и пароля юзера видел? Это - InternetErrorDlg...



вот это уже интересно, этого я не знал, ну тогда другие аргументы в пользу динамического подключения:
1. Грузится приложение быстрее, для меня это критично (хотя сам, если честно ни разу не проверял)
2. Мое приложение может функционировать и без этой dll, т.е. основной функционал приложения заложен не в доступе к ftp.
вот.

1
02 сентября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by enola
вот это уже интересно, этого я не знал, ну тогда другие аргументы в пользу динамического подключения:
1. Грузится приложение быстрее, для меня это критично (хотя сам, если честно ни разу не проверял)
2. Мое приложение может функционировать и без этой dll, т.е. основной функционал приложения заложен не в доступе к ftp.
вот.


Приложение будет грузится быстрее только в том случае если загрузка нужной длл происходит не в момент загрузки приложения...:)
И видоуз без нее тож бывает. Другое дело что это сейчас бывает редко. А вообще библиотека появилась на сервиспаке для 95.

246
02 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola

1. Грузится приложение быстрее, для меня это критично (хотя сам, если честно ни разу не проверял)


Да, но функция где идет доступ к FTP выполняется медленней + надо сделать(не забыть сделать!) FreeLibrary. Критично будет если это обращение будет частым. Если редко, то базара нет.

10
02 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by GIZMO
Да, но функция где идет доступ к FTP выполняется медленней + надо сделать(не забыть сделать!) FreeLibrary. Критично будет если это обращение будет частым. Если редко, то базара нет.


А можно грузить при первом обращении, а освобождать при завершении программы, если уж настолько скорость критична.

335
03 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Freeman
А можно грузить при первом обращении, а освобождать при завершении программы, если уж настолько скорость критична.



всегда так и делаю :)

246
03 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
всегда так и делаю :)


Так вот Я тебе и говорю, что в этом случае никакого выигрыша нет, а лишний код писать надо.
Если бы тебе нужно было изредка обращатся к FTP (где то по ходу программы), то это было бы обосновано - dll-ка в памяти не висит, загрузил, отработал выгрузил. А так, что система ее загрузит, что Ты одна фигня и висит всю дорогу в памяти. К тоиу же вряд-ли код LoadLibrary отличается от того, что использует система. Если Я не прав пусть меня поправят профи.

335
03 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO
Так вот Я тебе и говорю, что в этом случае никакого выигрыша нет, а лишний код писать надо.
Если бы тебе нужно было изредка обращатся к FTP (где то по ходу программы), то это было бы обосновано - dll-ка в памяти не висит, загрузил, отработал выгрузил. А так, что система ее загрузит, что Ты одна фигня и висит всю дорогу в памяти. К тоиу же вряд-ли код LoadLibrary отличается от того, что использует система. Если Я не прав пусть меня поправят профи.



вот ты сам и сказал, я изредка буду к ftp обращаться мне не надо чтоб эта dll постоянно в памяти сидела! у меня приложение будет работать и в зависимости от заданных параметров обращаться иногда, а может быть и никогда к ftp, вот.

246
03 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
вот ты сам и сказал, я изредка буду к ftp обращаться мне не надо чтоб эта dll постоянно в памяти сидела! у меня приложение будет работать и в зависимости от заданных параметров обращаться иногда, а может быть и никогда к ftp, вот.


- Мальчик тебя как зовут?
- Молчит.
- Ты, что тормоз?
- Вова.
- А чего молчишь?
- Я не тормоз.
Ну торможу с утра, не проснулся. "ПРИ ОБРАЩЕНИИ, а НЕ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ".

335
03 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO
- Мальчик тебя как зовут?
- Молчит.
- Ты, что тормоз?
- Вова.
- А чего молчишь?
- Я не тормоз.
Ну торможу с утра, не проснулся. "ПРИ ОБРАЩЕНИИ, а НЕ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ".



сам ты тормоз! :)
когда программа начнет работать с ftp тогда и будет происходить загрузка dll (епть слов на Вас не хватает), а если уж начали работать с ftp, то при завершении проги выгрузка dll.
а ты GIZMO пойми, что если она, программа, с ftp "сегодня" работать не будет то грузить ее на кой???!!!!!

специально для таких "профессионалов" как ты:
"Статическое связывание означает, что DLL загружается сразу, как только начинает выполняться приложение, которое будет ее использовать." ЗНАЧИТ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ, dll эта будет в память грузиться "тормоз".
"Динамическое связывание отличается от статического тем, что библиотека DLL загружается только в тот момент, когда необходимо выполнить какую-то хранящуюся в ней функцию." А при таком использовании только когда буду ftp обращаться, тормоз. "Программирование в С++ Builder 6" А.Я. Архангельский. Млять куча профи один я такой. Ты чем анекдоты копировать, лучше из книжек цитировал.

Все равно спасибо всем.

246
03 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by enola
сам ты тормоз! :)
когда программа начнет работать с ftp тогда и будет происходить загрузка dll (епть слов на Вас не хватает), а если уж начали работать с ftp, то при завершении проги выгрузка dll.
а ты GIZMO пойми, что если она, программа, с ftp "сегодня" работать не будет то грузить ее на кой???!!!!!

специально для таких "профессионалов" как ты:
"Статическое связывание означает, что DLL загружается сразу, как только начинает выполняться приложение, которое будет ее использовать." ЗНАЧИТ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ, dll эта будет в память грузиться "тормоз".
"Динамическое связывание отличается от статического тем, что библиотека DLL загружается только в тот момент, когда необходимо выполнить какую-то хранящуюся в ней функцию." А при таком использовании только когда буду ftp обращаться, тормоз. "Программирование в С++ Builder 6" А.Я. Архангельский. Млять куча профи один я такой. Ты чем анекдоты копировать, лучше из книжек цитировал.

Все равно спасибо всем.


Дак тормоз это Я про себя. Я не профи, подпись видишь USER. Книги Архангельского читать не стоит. он тоже тормоз.

10
03 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by enola
"Статическое связывание означает, что DLL загружается сразу, как только начинает выполняться приложение, которое будет ее использовать." ЗНАЧИТ ПРИ ЗАГРУЗКЕ ПРОГРАММЫ, dll эта будет в память грузиться "тормоз".
"Динамическое связывание отличается от статического тем, что библиотека DLL загружается только в тот момент, когда необходимо выполнить какую-то хранящуюся в ней функцию." А при таком использовании только когда буду ftp обращаться, тормоз. "Программирование в С++ Builder 6" А.Я. Архангельский.


Кстати, это ровным счетом ничего не означает. Уверен (хотя проверить нечем), что в 2000/XP в числе прочих оптимизаций загрузки программ была сделана и фактическая загрузка DLL в память при первом обращении к соответствующей функции, on demand, так сказать, как делается в Java и .NET. Правда, для соответствия старым версиям API да, ничего не изменилось, и проверка присутствия соответствующей DLL в системе делается при загрузке программы. Собственно, и завязываться на подобную отложенную загрузку особенно нельзя, тем более, если программа рассчитана на работу в любой версии Windows.

Следовательно, использованные решения с ручной загрузкой по требованию можно признать верными. :D

335
03 сентября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by GIZMO
Дак тормоз это Я про себя. Я не профи, подпись видишь USER. Книги Архангельского читать не стоит. он тоже тормоз.



ну если ты про себя, тогда забираю свои слова обратно, ну про тормоза :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог