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 - 例如我不知道我是否有指向回调函数的指针正确。

_In_        WINHTTP_STATUS_CALLBACK lpfnInternetCallback,

转换成:

ByVal lpfnInternetCallback As Long

我也不确定我是否正确。

我对如何定义异步回调函数本身没有明确的想法。这是我的初步尝试:

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