リモート サーバーへの同期 WinHttp 呼び出しを使用する vb6 サービスがあります。これらの呼び出しは、接続の問題 (ネットワーク/インターネットなど) があると思われる時間帯にサービスをロックアップします。
私の仕事は、WinHttp 非同期呼び出しを実装することです。
最初のステップとして、C++ から vb6 への変換を理解しようとしています。覚えておいてください、私はこれまで C++ の行を書いたことはありません。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383917(v=vs.85).aspx
typedef void ( CALLBACK *WINHTTP_STATUS_CALLBACK)(
_In_ HINTERNET hInternet,
_In_ DWORD_PTR dwContext,
_In_ DWORD dwInternetStatus,
_In_ LPVOID lpvStatusInformation,
_In_ DWORD dwStatusInformationLength
);
これは私の試みです:
Public Declare Function WINHTTP_STATUS_CALLBACK Lib "winhttp.dll"
(ByVal hSession As Long, dwContext As Long, dwInternetStatus As Integer,
lpvStatusInformation As Long, dwStatusInformationLength As Integer)
それが正しいかどうかはわかりません。残念ながら、もう少し先に進むまでテストできません。
次は WinHttpSetStatusCallback です
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384115(v=vs.85).aspx
WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(
_In_ HINTERNET hInternet,
_In_ WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
_In_ DWORD dwNotificationFlags,
_Reserved_ DWORD_PTR dwReserved
);
これは私の試みです:
Public Declare Function WinHttpSetStatusCallback Lib "winhttp.dll"
(ByVal hInternet As Long, ByVal lpfnInternetCallback As Long,
ByVal dwNotificationFlags As Long, ByVal dwReserved As Long) As Long
私の変換が正しいかどうかはよくわかりません。誰でもこれを確認できますか?
次に、WinHttpSetStatusCallback の実装方法がわかりません。たとえば、Callback 関数へのポインタが正しいかどうかわかりません。
_In_ WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
に変換:
ByVal lpfnInternetCallback As Long
それが正しいかどうかもわかりません。
Async Callback 関数自体を定義する方法について明確な考えがありません。これが私の最初の試みです:
Public Function AsyncCallback(
ByVal hInternet As Long,
dwContext As Long,
dwInternetStatus As Long,
lpvStatusInformation As Long,
dwStatusInformationLength As Long)
//code in here
End Function
それから最後に、すべてを配線するのが面白いでしょう。しかし、最初に、基礎が正しいことを確認する必要があります。そうしないと、魔法のように「機能する」とは期待できません。
MSDN C++ の例は次のとおりです。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa384115(v=vs.85).aspx
// Install the status callback function.
WINHTTP_STATUS_CALLBACK isCallback = WinHttpSetStatusCallback( hSession,
(WINHTTP_STATUS_CALLBACK)AsyncCallback,
WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,
NULL);
vb6 で AsyncCallback 関数へのポインタを定義するにはどうすればよいですか?