〜 ネットワーク 〜
インターネットサービスのオープン/クローズ (要WININET.DLL)

HSP3からHSPInet.DLLが標準で同梱されており、
このDLLの命令を使うことでインターネット上のデータを取り込むことが出来ます。
便利なものですが、作成した実行ファイルと共にDLLを同梱する必要があるので、
様々な理由により「なんとかDLLナシで実現できないか」と思う人たちの為の参考Tips。
HSPInet.DLLは、Windows標準搭載のWinInet.DLLのラッパーDLLなので、
WinInet.DLLのAPI関数を直接呼び出すことで、
HSPInet.DLLを同梱することなく実現させることが可能となります。
尚、今回のTipsではnetinit命令に代わってAPI関数InternetOpenを、
netterm命令に代わってAPI関数InternetCloseHandleを使ってサービスの接続、終了を行います。
ユーザーエージェントやプロキシサーバ設定もできるInternetOpenでインターネットサービスを開始すると、
各種サービスに必要なインターネットハンドルが返りますので、変数に保存しておき、
使用が終われば最終的にInternetCloseHandleで上記ハンドルを指定して終了させてください。
サンプルモジュールでは、プログラム終了時に自動的に呼び出される作りとなっているので、
明示的に終了処理を記述する手続きは必要ありません。
	

inetinit
[パラメータなし]インターネットサービスを開始するだけである為、パラメータは必要ない。

inetend
[パラメータなし]インターネットハンドルを解放するだけの為、パラメータは必要ない。
尚、終了時に自動的に呼び出されるので命令を実行する必要はない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
	ll_libload wininet, "wininet.dll"
	ll_getproc InternetOpen, "InternetOpenA", wininet
	ll_getproc InternetCloseHandle, "InternetCloseHandle", wininet

#module
#deffunc inetinit
	mref stt, 64
	prm = 0, 0, 0, 0, 0
	agent = "hspbc"
	ll_getptr agent : ll_ret prm
	ll_callfunc prm, 5, InternetOpen@
	ll_ret hinet : stt = hinet
	return

#deffunc inetend onexit
	if hinet : ll_callfunc hinet, 1, InternetCloseHandle@
	return
#global

	inetinit
	if stat {
		mes "インターネットの初期化に成功しました"
	} else {
		mes "インターネットサービスは使用できません"
	}
	stop

inetinit
[パラメータなし]インターネットサービスを開始するだけである為、パラメータは必要ない。

inetend
[パラメータなし]インターネットハンドルを解放するだけの為、パラメータは必要ない。
尚、終了時に自動的に呼び出されるので命令を実行する必要はない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#uselib "wininet.dll"
#cfunc	global InternetOpen "InternetOpenA" sptr, int, int, int, int
#func	global InternetCloseHandle "InternetCloseHandle" int

#module
#deffunc inetinit
	hinet = InternetOpen("hspbc")
	return hinet

#deffunc inetend onexit
	if hinet : InternetCloseHandle hinet
	return
#global

	inetinit
	if stat {
		mes "インターネットの初期化に成功しました"
	} else {
		mes "インターネットサービスは使用できません"
	}