Раздел: [[Программирование | ]]>[[ВзаимодействиеСОкружением]]
----
Из DevelopmentAxapta (Dahlsgaard Jan)
В Класс/WinInet, добавьте [[СlassDeclaration]] следующее:
DLLFunction _internetConnect;
DLLFunction _ftpGetFile;
DLLFunction _ftpPutFile;
и вот это в new:
_internetConnect = new DLLFunction(_winInet,"InternetConnectA");
_internetConnect.returns(ExtTypes::DWORD);
_internetConnect.arg(ExtTypes::DWORD);
_internetConnect.arg(ExtTypes::STRING);
_internetConnect.arg(ExtTypes::DWORD);
_internetConnect.arg(ExtTypes::STRING);
_internetConnect.arg(ExtTypes::STRING);
_internetConnect.arg(ExtTypes::DWORD);
_internetConnect.arg(ExtTypes::DWORD);
_internetConnect.arg(ExtTypes::DWORD);
_ftpGetFile = new DLLFunction(_winInet,"FtpGetFileA");
_ftpGetFile.returns(ExtTypes::DWORD);
_ftpGetFile.arg(ExtTypes::DWORD);
_ftpGetFile.arg(ExtTypes::STRING);
_ftpGetFile.arg(ExtTypes::STRING);
_ftpGetFile.arg(ExtTypes::DWORD);
_ftpGetFile.arg(ExtTypes::DWORD);
_ftpGetFile.arg(ExtTypes::DWORD);
_ftpGetFile.arg(ExtTypes::DWORD);
_ftpPutFile = new DLLFunction(_winInet,"FtpPutFileA");
_ftpPutFile.returns(ExtTypes::DWORD);
_ftpPutFile.arg(ExtTypes::DWORD);
_ftpPutFile.arg(ExtTypes::STRING);
_ftpPutFile.arg(ExtTypes::STRING);
_ftpPutFile.arg(ExtTypes::DWORD);
_ftpPutFile.arg(ExtTypes::DWORD);
и следующие функции:
int internetConnect(str 60 _server, str 99 _userName, str 99 _password )
{
return
_internetConnect.call(_handle,_server,0,_userName,_password,1,0,0);
}
int FtpGetFile(int _hdl, str 255 _remoteFile, str 255 _localFile)
{
return
_FtpGetFile.call(_hdl,_remoteFile,_localFile,false,0,#FTP_TRANSFER_TYPE_BINARY,0);
}
int FtpPutFile(int _hdl, str 255 _localFile, str 255 _remoteFile)
{
return
_FtpPutFile.call(_hdl,_localFile,_remoteFile,#FTP_TRANSFER_TYPE_BINARY,0);
}
boolean ftpSetCurrentDirectory(str _name)
{
DLLFunction setCurrentDirectory = new DLLFunction(winInetDLL, 'FtpSetCurrentDirectoryA');
;
if (connectHandle == 0)
return false;
setCurrentDirectory.returns(ExtTypes::DWord);
setCurrentDirectory.arg(ExtTypes::DWord,
ExtTypes::String);
return setCurrentDirectory.call(connectHandle, _name) != 0;
}
Используйте internetconnect для соединения с ftp сервером, и ftpgetfile, ftpputfile для получения и посылки файлов, ftpSetCurrentDirectory для смены текущего каталога
XPO файл с добавленными функциями
Exportfile for AOT version 1.0 or later
Formatversion: 1
***Element: CLS
; Axapta Class: WinInet unloaded at Monday 1/9/2006
; --------------------------------------------------------------------------------
CLSVERSION 1
CLASS #WinInet
PROPERTIES
Name #WinInet
Extends #
RunOn #Client
ENDPROPERTIES
METHODS
Version: 3
SOURCE #classDeclaration
#final class WinInet
#{
# DLL _winInet;
# DLLFunction _internetOpen;
# DLLFunction _internetCloseHandle;
# DLLFunction _internetOpenUrl;
# DLLFunction _internetReadFile;
#
# int _handle;
# int _result;
#
# DLLFunction _internetConnect;
# DLLFunction _ftpGetFile;
# DLLFunction _ftpPutFile;
# DLLFunction _ftpSetCurrentDirectory;
# DLLFunction _ftpCommand;
# DLLFunction _ftpFindFirstFile;
# DLLFunction _ftpDeleteFile;
# DLLFunction _ftpRenameFile;
# DLLFunction _ftpCreateDirectory;
# DLLFunction _ftpRemoveDirectory;
# DLLFunction _ftpGetCurrentDirectory;
#
#
# #define.FTP_TRANSFER_TYPE_BINARY(2)
# #define.FTP_TRANSFER_TYPE_UNKNOWN(0)
# #define.FTP_TRANSFER_TYPE_ASCII(1)
#
#}
ENDSOURCE
SOURCE #finalize
#void finalize()
#{
# this.internetCloseHandle(_handle);
#}
ENDSOURCE
SOURCE #ftpCommand
#int ftpCommand(int _handler, boolean _expectResponseIn, str 255 _command)
#{
# int _handlerOut;
# int _expectResponse;
# ;
#
# if (_expectResponseIn)
# _expectResponse = 1;
# else
# _expectResponse = 0;
#
# if(_ftpCommand.call(_handler, _expectResponse, #FTP_TRANSFER_TYPE_ASCII, _command, 0, _handlerOut) == 0)
# return 0;
# else
# return _handlerOut;
#}
ENDSOURCE
SOURCE #ftpCreateDirectory
#boolean ftpCreateDirectory(int _hdl, str 255 _name)
#{
# if (_ftpCreateDirectory.call(_hdl, _name) == 0)
# return false;
# else
# return true;
#}
ENDSOURCE
SOURCE #ftpDeleteFile
#boolean ftpDeleteFile(int _hdl, str 255 _file)
#{
# if (_ftpDeleteFile.call(_hdl, _file) == 0)
# return false;
# else
# return true;
#}
ENDSOURCE
SOURCE #ftpGetCurrentDirectory
#int ftpGetCurrentDirectory(int _hdl, str 255 _remoteFile, str 255 _localFile)
#{
# return 0;//_ftpGetCurrentDirectory.call(_hdl,_remoteFile,_localFile,false,0,#FTP_TRANSFER_TYPE_BINARY,0);
#}
#
ENDSOURCE
SOURCE #FtpGetFile
#int ftpGetFile(int _hdl, str 255 _remoteFile, str 255 _localFile)
#{
# return _FtpGetFile.call(_hdl,_remoteFile,_localFile,false,0,#FTP_TRANSFER_TYPE_BINARY,0);
#}
ENDSOURCE
SOURCE #FtpPutFile
#int ftpPutFile(int _hdl, str 255 _localFile, str 255 _remoteFile)
#{
# return _FtpPutFile.call(_hdl,_localFile,_remoteFile,#FTP_TRANSFER_TYPE_BINARY,0);
#}
ENDSOURCE
SOURCE #ftpRemoveDirectory
#boolean ftpRemoveDirectory(int _hdl, str 255 _name)
#{
# if (_ftpRemoveDirectory.call(_hdl, _name) == 0)
# return false;
# else
# return true;
#}
ENDSOURCE
SOURCE #ftpRenameFile
#boolean ftpRenameFile(int _hdl, str 255 _fileOld, str 255 _fileNew)
#{
# if (_ftpRenameFile.call(_hdl, _fileOld, _fileNew) == 0)
# return false;
# else
# return true;
#}
ENDSOURCE
SOURCE #ftpSetCurrentDirectory
#Boolean ftpSetCurrentDirectory(int _handler, str _name)
#{
# ;
#
# if (_handler == 0)
# return false;
#
# if (_ftpSetCurrentDirectory.call(_handler, _name) == 0)
# return false;
# else
# return true;
#}
#
ENDSOURCE
SOURCE #internetCloseHandle
#boolean internetCloseHandle(int handle)
#{
# return _internetCloseHandle.call(handle);
#}
ENDSOURCE
SOURCE #internetConnect
#int internetConnect(str 60 _server, str 99 _userName, str 99 _password )
#{
# return _internetConnect.call(_handle,_server,0,_userName,_password,1,0,0);
#}
ENDSOURCE
SOURCE #internetOpen
#int internetOpen(str 255 agent,int accessType,str 255 proxyName,str 255 proxyByPass,int flags)
#{
#
#
#
# return _internetOpen.call(agent,accessType,proxyName,proxyByPass,flags);
#}
ENDSOURCE
SOURCE #internetOpenUrl
#int internetOpenUrl(str 500 url,int flags = 0,int context = 0)
#{
# Binary _headers = new Binary(512);
# int hdl = _internetOpenUrl.call(_handle,url,"",-1,flags,context);
# return hdl;
#
#
#}
ENDSOURCE
SOURCE #internetReadFile
#str internetReadFile(int hdl)
#{
# Binary _buffer = new Binary(2048);
# Binary _bytesRead = new Binary(4);
# str result;
# boolean ret;
# int done = 0;
#
# while (! done)
# {
# ret = _internetReadFile.call(hdl,_buffer,2000,_bytesRead);
# if ((! _bytesRead.dWord(0)) || (! ret))
# done = 1;
# else
# {
# result += subStr(_buffer.string(0),1,_bytesRead.dWord(0));
# }
# }
# return ret ? result : "";
#}
ENDSOURCE
SOURCE #new
#void new()
#{
# try
# {
# _winInet = new DLL("WinInet");
# }
# catch(Exception::Internal)
# {
# infolog.clear();
# return;
# }
#
# _internetOpen = new DLLFunction(_winInet,"InternetOpenA");
# _internetOpen.returns(ExtTypes::DWORD);
# _internetOpen.arg(ExtTypes::STRING);
# _internetOpen.arg(ExtTypes::DWORD);
# _internetOpen.arg(ExtTypes::STRING);
# _internetOpen.arg(ExtTypes::STRING);
# _internetOpen.arg(ExtTypes::DWORD);
#
# _internetCloseHandle = new DLLFunction(_winInet,"InternetCloseHandle");
# _internetCloseHandle.returns(ExtTypes::DWORD);
# _internetCloseHandle.arg(ExtTypes::DWORD);
#
# _internetOpenUrl = new DLLFunction(_winInet,"InternetOpenUrlA");
# _internetOpenUrl.returns(ExtTypes::DWORD);
# _internetOpenUrl.arg(ExtTypes::DWORD);
# _internetOpenUrl.arg(ExtTypes::STRING);
# _internetOpenUrl.arg(ExtTypes::STRING);
# _internetOpenUrl.arg(ExtTypes::DWORD);
# _internetOpenUrl.arg(ExtTypes::DWORD);
# _internetOpenUrl.arg(ExtTypes::DWORD);
#
# _internetReadFile = new DLLFunction(_winInet,"InternetReadFile");
# _internetReadFile.returns(ExtTypes::DWORD);
# _internetReadFile.arg(ExtTypes::DWORD);
# _internetReadFile.arg(ExtTypes::POINTER);
# _internetReadFile.arg(ExtTypes::DWORD);
# _internetReadFile.arg(ExtTypes::POINTER);
#
# _handle = this.internetOpen("Axapta",0,"","",0);
#
# _internetConnect = new DLLFunction(_winInet,"InternetConnectA");
# _internetConnect.returns(ExtTypes::DWORD);
# _internetConnect.arg(ExtTypes::DWORD);
# _internetConnect.arg(ExtTypes::STRING);
# _internetConnect.arg(ExtTypes::DWORD);
# _internetConnect.arg(ExtTypes::STRING);
# _internetConnect.arg(ExtTypes::STRING);
# _internetConnect.arg(ExtTypes::DWORD);
# _internetConnect.arg(ExtTypes::DWORD);
# _internetConnect.arg(ExtTypes::DWORD);
#
# _ftpGetFile = new DLLFunction(_winInet,"FtpGetFileA");
# _ftpGetFile.returns(ExtTypes::DWORD);
# _ftpGetFile.arg(ExtTypes::DWORD);
# _ftpGetFile.arg(ExtTypes::STRING);
# _ftpGetFile.arg(ExtTypes::STRING);
# _ftpGetFile.arg(ExtTypes::DWORD);
# _ftpGetFile.arg(ExtTypes::DWORD);
# _ftpGetFile.arg(ExtTypes::DWORD);
# _ftpGetFile.arg(ExtTypes::DWORD);
#
# _ftpPutFile = new DLLFunction(_winInet,"FtpPutFileA");
# _ftpPutFile.returns(ExtTypes::DWORD);
# _ftpPutFile.arg(ExtTypes::DWORD);
# _ftpPutFile.arg(ExtTypes::STRING);
# _ftpPutFile.arg(ExtTypes::STRING);
# _ftpPutFile.arg(ExtTypes::DWORD);
# _ftpPutFile.arg(ExtTypes::DWORD);
#
# _ftpSetCurrentDirectory = new DLLFunction(_winInet, 'FtpSetCurrentDirectoryA');
# _ftpSetCurrentDirectory.returns(ExtTypes::DWORD);
# _ftpSetCurrentDirectory.arg(ExtTypes::DWORD);
# _ftpSetCurrentDirectory.arg(ExtTypes::STRING);
#
# _ftpCommand = new DLLFunction(_winInet, 'FtpCommandA');
# _ftpCommand.returns(ExtTypes::DWORD);
# _ftpCommand.arg(ExtTypes::DWORD);
# _ftpCommand.arg(ExtTypes::DWORD);
# _ftpCommand.arg(ExtTypes::DWORD);
# _ftpCommand.arg(ExtTypes::STRING);
# _ftpCommand.arg(ExtTypes::DWORD);
# _ftpCommand.arg(ExtTypes::DWORD);
#
# _ftpDeleteFile = new DLLFunction(_winInet, 'FtpDeleteFileA');
# _ftpDeleteFile.returns(ExtTypes::DWORD);
# _ftpDeleteFile.arg(ExtTypes::DWORD);
# _ftpDeleteFile.arg(ExtTypes::STRING);
#
# _ftpRenameFile = new DLLFunction(_winInet, 'FtpRenameFileA');
# _ftpRenameFile.returns(ExtTypes::DWORD);
# _ftpRenameFile.arg(ExtTypes::DWORD);
# _ftpRenameFile.arg(ExtTypes::STRING);
# _ftpRenameFile.arg(ExtTypes::STRING);
#
# _ftpCreateDirectory = new DLLFunction(_winInet, 'FtpCreateDirectoryA');
# _ftpCreateDirectory.returns(ExtTypes::DWORD);
# _ftpCreateDirectory.arg(ExtTypes::DWORD);
# _ftpCreateDirectory.arg(ExtTypes::STRING);
#
# _ftpRemoveDirectory = new DLLFunction(_winInet, 'FtpRemoveDirectoryA');
# _ftpRemoveDirectory.returns(ExtTypes::DWORD);
# _ftpRemoveDirectory.arg(ExtTypes::DWORD);
# _ftpRemoveDirectory.arg(ExtTypes::STRING);
#
# _ftpGetCurrentDirectory = new DLLFunction(_winInet, 'FtpGetCurrentDirectoryA');
# _ftpGetCurrentDirectory.returns(ExtTypes::DWORD);
# _ftpGetCurrentDirectory.arg(ExtTypes::DWORD);
# _ftpGetCurrentDirectory.arg(ExtTypes::STRING);
# _ftpGetCurrentDirectory.arg(ExtTypes::STRING);
#
# /*_ftpFindFirstFile = new DLLFunction(_winInet, 'FtpFindFirstFileA');
# _ftpFindFirstFile.returns(ExtTypes::DWORD);
# _ftpFindFirstFile.arg(ExtTypes::DWORD);
# _ftpFindFirstFile.arg(ExtTypes::STRING);*/
#
#}
ENDSOURCE
SOURCE #ok
#boolean ok()
#{
# if (_winInet)
# return TRUE;
# else
# return FALSE;
#}
ENDSOURCE
ENDMETHODS
ENDCLASS
***Element: END
[[http://groups.yahoo.com/group/development-axapta/message/13410]]