Last time, we saw how hinting is used to speed up the resolving of imported functions. Today, we’ll look at binding. Recall that the module loader resolves imports by locating the function in the export table of the linked-to DLL and recording the results in the loaded module’s table of imported function addresses so that […]| The Old New Thing
Breaking the deadlock by disassociating from the thread pool.| The Old New Thing
Deferring an assertion to instantiation.| The Old New Thing
Another way things can go wrong.| The Old New Thing
Suppose you have a function that is registered to be called the next time something gets updated, and suppose that the notification is a one-shot notification and needs to be re-armed each time you want to wait for the next notification. (For example, the RegNotifyChangeKeyValue function behaves this way.) Consider the following code fragment: void […]| The Old New Thing
I did technically cross my fingers.| The Old New Thing
Unwrapping the projection, but now with interop.| The Old New Thing
Occasionally, there is need to illustrate a point with a full program. To avoid reproducing the boring parts of the program, let’s agree on using the following template for our sample programs. For expository purposes, I won’t use a C++ class. I’ll just keep all my variables global. In a real program, of course, instance […]| The Old New Thing
On Friday, we talked about some of the bad things that can happen if you call a function with the wrong signature. The ia64 introduces yet another possible bad consequence of a mismatched function signature which you may have thought was harmless. The CreateThread function accepts a LPTHREAD_START_ROUTINE, which has the function signature DWORD CALLBACK […]| The Old New Thing
The immediately-invoked lambda that returns a value.| The Old New Thing
Simplifying the problem to an earlier problem.| The Old New Thing
They are two kinds of undefined-ness, one for runtime and one for compile-time.| The Old New Thing
Not doing anything with it is exactly the point.| The Old New Thing
To stop relying on unspecified behavior.| The Old New Thing
Generalizing what we learned last time.| The Old New Thing
Giving it another try.| The Old New Thing
Let's see by seeing if we can do it with just two.| The Old New Thing
First attempt to try to fix the race condition.| The Old New Thing
Where each notification depends on some state information.| The Old New Thing
A little interop music.| The Old New Thing
It tries too hard and accidentally breaks CTAD.| The Old New Thing
A generalization of the ground rules of programming.| The Old New Thing
The rules of logic no longer apply when you cross the line.| The Old New Thing
Keep that dispatcher queue controller around, or you'll never be able to clean up.| The Old New Thing
How to be inert.| The Old New Thing
You have to do it before committing to destruction.| The Old New Thing
Mistakenly handing out COM references that don't work.| The Old New Thing
It tells you that you have already lost.| The Old New Thing
It does everything differently, because of course it does.| The Old New Thing