I recently asked a previous question in a seperate Thread, namely about calling back VB functions from C++ DLLS which run in seperate Threads. MerrionComputin answered the question (thanks!), but it raised a further, more general, question in my mind:

As I understand it the return value of the AddressOf operator CANNOT be used in the following circumstances:

1) By VB in any thread (as it cannot use function pointers to call functions).
2) By a DLL (or equivalent) which runs in a seperate Thread to the main VB app.

So my question is simply this: What use is it? If a DLL is going to use the AddressOf operator to call back a VB function, yet this DLL function runs in the same Thread as the main app, why not just wait for the DLL function to return normally? Usually in programming, call backs are used to deal with events which are unpredictable, and as such we do not wish to bother "waiting" for them, but would rather they notify us when something happens.
I can't think of a single circumstance where a user would Need a VB function to call a C++ function to call a VB function all in the same Threads calling stack! Surely instead the user would just use a VB function to call a C++ function, which would return, and then the VB app would call the final VB function itself.

Have I mis-understood?