troubleshooting Question

Wnat to implement Asynchronous winhttp in vb6

Avatar of Ruuu
Ruuu asked on
Visual Basic Classic
6 Comments1 Solution1289 ViewsLast Modified:
I have a vb6 service which uses Synchronous WinHttp calls to a remote server. These calls lockup the service during times when there appears to be connection issues (network/Internet etc).

My task is to implement WinHttp Asynchronous calls.

First step, I'm trying to figure out the conversions from C++ to vb6. Bearing in mind I've never written a line of C++ before.

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
);

This is my attempt:

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)

I have no idea if that's correct and unfortunately I can't test it until I get a bit further.

The next one is 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
);

This is my attempt:

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

I don't really know if my conversions are correct. Can anyone verify this?

Next, I don't know how to implement WinHttpSetStatusCallback - for example I don't know if I have the pointer to the Callback function correct.

_In_        WINHTTP_STATUS_CALLBACK lpfnInternetCallback,

converted to:

ByVal lpfnInternetCallback As Long

I'm not sure if I have that correct either.

I don't have a clear idea on how to define the Async Callback function itself. Here is my initial attempt:

Public Function AsyncCallback(
                        ByVal hInternet As Long,
                        dwContext As Long,
                        dwInternetStatus As Long,
                        lpvStatusInformation As Long,
                        dwStatusInformationLength As Long)
    //code in here
End Function

Then finally, wiring it all up is going to be interesting. But first I have to make sure I have the foundations right, otherwise I can't expect it to magically "work".

The MSDN C++ example is as follows: 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);

How do I define a pointer to the AsyncCallback function in vb6?
Module1.bas
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 6 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 6 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros