1

リモート サーバーへの同期 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 関数へのポインタを定義するにはどうすればよいですか?

4

0 に答える 0