Du übergibst nicht direkt Deine CallbackProc an die externe
Dll, sondern die Rückgabe von MakeProcInstance(CallbackProc);
Die merkst Du Dir zudem vorher in einer Variable - und nachdem Du fertig bist und der Callback nicht mehr aufgerufen werden kann gibst Du diesen Pointer auch mit FreeProcInstance wieder frei. Sonst hast Du ein Memory-Leak von 15 bytes.