AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.12.2004, 10:41   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
работа с wininet.dll
Здравствуйте, господа!

Есть следующий код:

void PutFile(str 50 proxy, str 50 url, str 50 login, str 50 pass, str 50 local, str 50 remote)
{
DLL InetDll = new DLL('wininet');
DLLFunction InternetOpen = new DLLFunction(InetDll, 'InternetOpenA');
DLLFunction InternetConnect = new DLLFunction(InetDll, 'InternetConnectA');
DLLFunction FTPPutFile = new DLLFunction(InetDll, 'FtpPutFileA');
DLLFunction InternetCloseHandle = new DLLFunction(InetDll, 'InternetCloseHandle');

int res;

InternetOpen.returns(ExtTypes:Word);
InternetOpen.arg(ExtTypes::String);
InternetOpen.arg(ExtTypes:Word);
InternetOpen.arg(ExtTypes::String);
InternetOpen.arg(ExtTypes::String);
InternetOpen.arg(ExtTypes:Word);

hInternet = InternetOpen.call('Ax30', 3, proxy, '', 0);

InternetConnect.returns(ExtTypes:Word);
InternetConnect.arg(ExtTypes:Word);
InternetConnect.arg(ExtTypes::String);
InternetConnect.arg(ExtTypes::Word);
InternetConnect.arg(ExtTypes::String);
InternetConnect.arg(ExtTypes::String);
InternetConnect.arg(ExtTypes:Word);
InternetConnect.arg(ExtTypes:Word);
InternetConnect.arg(ExtTypes:Word);

hConnect = InternetConnect.call(hInternet, url, 21, login, pass, 1, 0, 0);

FTPPutFile.returns(ExtTypes:Word);
FTPPutFile.arg(ExtTypes:Word);
FTPPutFile.arg(ExtTypes::String);
FTPPutFile.arg(ExtTypes::String);
FTPPutFile.arg(ExtTypes:Word);
FTPPutFile.arg(ExtTypes:Word);

res = FTPPutFile.call(hConnect, local, remote, 2, 0);

InternetCloseHandle.returns(ExtTypes::Word);
InternetCloseHandle.arg(ExtTypes:Word);

InternetCloseHandle.call(hConnect);
InternetCloseHandle.call(hInternet);
}

Переменные hItnernet и hConnect объявлены в cassDeclaration

В таком виде данная ф-ция прекрасно работает, но хотелось бы чтобы каждая ф-ция из DLL была в отдельной ф-ции класса. В этом случае работать сразу перестает (ф-ция InternetConnect возвращает ошибку). В Delphi и VB такой механизм работает.

Где глюк????
Старый 01.12.2004, 12:11   #2  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
А как ошибка выглядит?
Старый 01.12.2004, 12:31   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
GetLastError возвращает 12172, а сама ф-ция возвращает 0
в MSDN описаны коды с 12001 - 12156 ???
Старый 01.12.2004, 12:53   #4  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Цитата:
Изначально опубликовано Lucky13
в MSDN описаны коды с 12001 - 12156 ???
Плохо смотрели в MSDN есть
http://msdn.microsoft.com/library/de...r_messages.asp
Старый 01.12.2004, 13:14   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Спасибо за ссылку, но это проблемы не решает
Ясно что хэндл неправильно инициализирован, вопрос почему?
Причем когда все в одной ф-ции - работает, а в разных не работает
Старый 01.12.2004, 13:24   #6  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
xpo с классом выложите
Старый 01.12.2004, 13:58   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Выложил
Вложения
Тип файла: xpo ftp.xpo (6.7 Кб, 609 просмотров)
Старый 01.12.2004, 14:55   #8  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
Попробуйте перегрузить метод new() Вашего класса, где проинициализируйте все объекты Internet. Что-то вроде
PHP код:
void new(str 50 proxystr 50 urlstr 50 loginstr 50 pass)
{
   
InetDll = new DLL('wininet');
   
InternetOpen = new DLLFunction(InetDll'InternetOpenA');
   
InternetConnect = new DLLFunction(InetDll'InternetConnectA');
   
FTPPutFile = new DLLFunction(InetDll'FtpPutFileA');
   
InternetCloseHandle = new DLLFunction(InetDll'InternetCloseHandle');


   
InternetOpen.returns(ExtTypes-DWord);
   
InternetOpen.arg(ExtTypes-)String);
   
InternetOpen.arg(ExtTypes-)DWord);
   
InternetOpen.arg(ExtTypes-)String);
   
InternetOpen.arg(ExtTypes-)String);
   
InternetOpen.arg(ExtTypes-)DWord);

   
hInternet InternetOpen.call('Ax30'3proxy''0);

   
InternetConnect.returns(ExtTypes-)DWord);
   
InternetConnect.arg(ExtTypes-)DWord);
   
InternetConnect.arg(ExtTypes-)String);
   
InternetConnect.arg(ExtTypes-)Word);
   
InternetConnect.arg(ExtTypes-)String);
   
InternetConnect.arg(ExtTypes-)String);
   
InternetConnect.arg(ExtTypes-)DWord);
   
InternetConnect.arg(ExtTypes-)DWord);
   
InternetConnect.arg(ExtTypes-)DWord);

   
hConnect InternetConnect.call(hInterneturl21loginpass100);

 } 
Старый 01.12.2004, 15:03   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Спасибо за совет, все получилось.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с самописной DLL. VAlek DAX: Программирование 18 28.12.2008 10:37
axaptapedia: WinInet class Blog bot DAX Blogs 0 28.09.2007 20:54
Client Axapta 3.0 SP4 и Linux. Как запустить? Daiver DAX: Администрирование 10 28.06.2007 15:59
Axapta Lessons: Axapta DLLs Blog bot DAX Blogs 0 28.10.2006 18:22
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:40.