タイトル : Re^4: VB2010 internetsetoption 投稿日 : 2015/04/15(Wed) 18:08 投稿者 : D
> > Public Const INTERNET_OPTION_CONNECT_TIMEOUT As Long = 2 '接続タイムアウト > > これらの定数値は DWORD 型です。VB2010 でいえば UInt32 相当。 > > As Integer や As UInteger ならばサイズが合いますが、 > As Long (すなわち Int64) では合致しません。 Integerに修正します。 > > Private Declare Auto Function InternetSetOption Lib "wininet.dll" _ > > (ByVal hInternet As IntPtr, ByVal dwOption As Integer, _ > > ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean > > lpBuffer を ByVal IntPtr にしているようですが、あえてそうしたのでしょうか? > 複数の型を扱うパラメータなので、VB6 の Any を直訳表現すると、確かにそうなってしまいますが…。 インターネットで検索した参考プログラムをそのまま流用しておりました。 VBに甘え続けたせいでこのあたりのチェック能力が発展してませんでした。 Integer型にします。 > > Function FtpSetOption(pOption As Long, pValue As Long) As Boolean > 引数を Int64 型にしているのは意図的ですか? 特別な意図はありませんでした。 再検討します。 > API の利用時には『暗黙の型変換』に頼らぬよう、 > 「Option Strict On」を設定しておくことを強くお奨めします。 > (今回の指摘事項の多くが、それで防げたはず) 今しがた「Option Strict On」を設定しました。 コンパイルエラーがたくさん出てきましたので、ひとつずつ対処していきます。 > > LenB(pValue) > VB2010 に、このような関数は用意されていないはずです。(VB6 にはありますが) > 恐らくは自作関数だと思いますが、それはどういった実装になっていますか? > > > > > 粗い抜粋ですがこのような感じです。 > 結局、InternetSetOption は True / False いずれを返してくるのでしょうか? > > 接続タイムアウト時間を計測しても5secではタイムアウトしませんでした。 > InternetSetOption が失敗したことで、そのような結果になったのでしょうか? > それとも、呼び出しは成功したのに、タイムアウトが反映されていないのでしょうか? 呼び出しは成功したようにみえたのですが、再確認いたします。 > 何にせよ、見直すべきは lpBuffer と lpdwBufferLength ですね。 全体的に型を意識して見直してみます。 再テストできる環境が整うまでに時間がかかりそうなので、追ってご連絡させて頂きます。 大変勉強になります。ありがとうございます。 |