HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0426
そうむwininet640解決


そうむ

リンク

2024/4/26(Fri) 14:49:39|NO.101631

hsp3_64.as と hspint64.as の練習に wininet.dll のFTPのラップ関数を
モジュール化してみました。使い方がおかしい部分などがあれば、ご指摘
頂けると助かります。

////////////////////////////////////////////////////
//Required Includes
//#include "hsp3_64.as"
//#include "hspint64.as"
////////////////////////////////////////////////////

#module wininet64

#ifdef __hsp30__
#ifndef __WININET64__
#define global __WININET64__

#uselib "kernel32.dll"
#cfunc GetLastError "GetLastError"

#uselib "WININET.DLL"
#func global InternetOpen "InternetOpenA" sptr,sptr,sptr,sptr,sptr
#func global InternetConnect "InternetConnectA" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func global InternetCloseHandle "InternetCloseHandle" sptr
#func global InternetGetLastResponseInfo "InternetGetLastResponseInfoA" sptr,sptr,sptr
#func global FtpPutFile "FtpPutFileA" sptr,sptr,sptr,sptr,sptr
#func global FtpGetFile "FtpGetFileA" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func global FtpDeleteFile "FtpDeleteFileA" sptr,sptr
#func global FtpRenameFile "FtpRenameFileA" sptr,sptr,sptr
#func global FtpCommand "FtpCommandA" sptr,sptr,sptr,sptr,sptr
#func global FtpCreateDirectory "FtpCreateDirectoryA" sptr,sptr
#func global FtpRemoveDirectory "FtpRemoveDirectoryA" sptr,sptr
#func global FtpSetCurrentDirectory "FtpSetCurrentDirectoryA" sptr,sptr
#func global FtpGetCurrentDirectory "FtpGetCurrentDirectoryA" sptr,sptr,sptr

;InternetOpen AccessType
#define INTERNET_OPEN_TYPE_DIRECT 1 ;全てのホスト名をローカルに解決

;InternetConnect Service
#define INTERNET_SERVICE_FTP 1 ;FTP
#define INTERNET_FLAG_PASSIVE 0x08000000

;FtpPutFile Flags
#define FTP_TRANSFER_TYPE_ASCII 1
#define FTP_TRANSFER_TYPE_BINARY 2

#define INTERNET_FLAG_RELOAD 0x80000000
#define INTERNET_FLAG_DONT_CACHE 0x04000000

;FtpGetFile Attr
#define FILE_ATTRIBUTE_ARCHIVE 0x20 ;アーカイブ
#define FILE_ATTRIBUTE_DIRECTORY 0x10 ;ディレクトリ
#define FILE_ATTRIBUTE_HIDDEN 0x02 ;隠しファイル
#define FILE_ATTRIBUTE_NORMAL 0x80 ;属性を持たない
#define FILE_ATTRIBUTE_READONLY 0x01 ;読み込み専用
#define FILE_ATTRIBUTE_SYSTEM 0x04 ;システムファイル

#define TRUE 1
#define FALSE 0
#define NULL 0

#define global ERROR_INTERNET_EXTENDED_ERROR 12003
#endif

////////////////////////////////////////////////////
#defcfunc _GetLastError
return cfunc64i(GetLastError)

////////////////////////////////////////////////////
;ネットワークオープン
#defcfunc netOpen
mref _stat, 64

;オープンされていればクローズ
ftpClose
netClose

;インターネットに接続
hInternet = cfunc64i(InternetOpen, nullptr, INTERNET_OPEN_TYPE_DIRECT, nullptr, nullptr, 0)
if hInternet {
return TRUE
}
_stat= _GetLastError()
return FALSE

////////////////////////////////////////////////////
;ネットワーククローズ
#deffunc netClose
if hSession {
cfunc64v InternetCloseHandle, hSession
hSession = 0
}
return

////////////////////////////////////////////////////
;FTPオープン
#defcfunc ftpOpen str _Url, str _Username, str _Password, int _Port
if hInternet {
;サーバー(ホスト)に接続
hSession = cfunc64i(InternetConnect, hInternet, _Url, _Port, _Username, _Password, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
if hSession {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPクローズ
#deffunc ftpClose
if hInternet {
cfunc64v InternetCloseHandle, hInternet
hInternet = 0
}
return

////////////////////////////////////////////////////
;FTPレスポンス取得
#deffunc ftpLastResponse var _Err, var _Ans, var _Size
cfunc64v InternetGetLastResponseInfo, varptr64(_Err), varptr64(_Ans), varptr64(_Size)
return

////////////////////////////////////////////////////
;FTPファイル受信
#defcfunc ftpGet str _Src, str _Dst
if hSession {
iret = cfunc64i(FtpGetFile, hSession, _Src, _Dst, 1, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY + INTERNET_FLAG_RELOAD, 0)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPファイル送信
#defcfunc ftpPut str _Src, str _Dst
if hSession {
iret = cfunc64i(FtpPutFile, hSession, _Src, _Dst, FTP_TRANSFER_TYPE_BINARY, 0)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPファイル削除
#defcfunc ftpDel str _Src
if hSession {
iret = cfunc64i(FtpDeleteFile, hSession, _Src)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPファイル名変更
#defcfunc ftpRen str _Src, str _Dst
if hSession {
iret = cfunc64i(FtpRenameFile, hSession, _Src, _Dst)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPコマンド実行
#defcfunc ftpCmd str _Cmd
if hSession {
iret = cfunc64i(FtpCommand, hSession, FALSE, FTP_TRANSFER_TYPE_BINARY, _Cmd, 0, nullptr)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPディレクトリ作成
#defcfunc ftpMkDir str _Dir
if hSession {
iret = cfunc64i(FtpCreateDirectory, hSession, _Dir)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPディレクトリ削除
#defcfunc ftpRmDir str _Dir
if hSession {
iret = cfunc64i(FtpRemoveDirectory, hSession, _Dir)
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPカレントディレクトリ取得
#defcfunc ftpGetDir var _Ans, var _Size
if hSession {
;FTPの現在のディレクトリ名を取得
iret = cfunc64i(FtpGetCurrentDirectory, hSession, varptr64(_Ans), varptr64(_Size))
if iret {
return TRUE
}
_stat= _GetLastError()
}
return FALSE

////////////////////////////////////////////////////
;FTPカレントディレクトリ変更
#defcfunc ftpSetDir str _Dir
if hSession {
;カレントのディレクトリを変更
if strlen(_Dir) > 0 {
iret = cfunc64i(FtpSetCurrentDirectory, hSession, _Dir)
if iret {
return TRUE
}
_stat= _GetLastError()
}
}
return FALSE

////////////////////////////////////////////////////
;FTPディレクトリ移動・取得
#defcfunc ftpDir str _Dir, var _Ans, var _Size
if hSession {
;カレントのディレクトリを変更
if strlen(_Dir) > 0 {
iret = cfunc64i(FtpSetCurrentDirectory, hSession, _Dir)
if iret {
;FTPの現在のディレクトリ名を取得
iret = cfunc64i(FtpGetCurrentDirectory, hSession, varptr64(_Ans), varptr64(_Size))
if iret {
return TRUE
}
}
_stat= _GetLastError()
}
}
return FALSE

#global



この記事に返信する


記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101631への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.