Avatar of Ruuu
Ruuu

asked on 

Wnat to implement Asynchronous winhttp in vb6

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
Visual Basic Classic

Avatar of undefined
Last Comment
Ruuu
Avatar of aikimark
aikimark
Flag of United States of America image

use the AddressOf() function
Avatar of Ruuu
Ruuu

ASKER

I have used that function but in the asynccallback function parametert because of  ipvstatusinformation module is crashing.what should i used instead of long.?
ASKER CERTIFIED SOLUTION
Avatar of aikimark
aikimark
Flag of United States of America image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of Ruuu
Ruuu

ASKER

Thank you so much
Avatar of Ruuu
Ruuu

ASKER

Can anyone check if the code in the module is written correct or not?
Avatar of Ruuu
Ruuu

ASKER

As it is crashing at winhttpreceiveresponse fumction.
Visual Basic Classic
Visual Basic Classic

Visual Basic is Microsoft’s event-driven programming language and integrated development environment (IDE) for its Component Object Model (COM) programming model. It is relatively easy to learn and use because of its graphical development features and BASIC heritage. It has been replaced with VB.NET, and is very similar to VBA (Visual Basic for Applications), the programming language for the Microsoft Office product line.

165K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo