снятие хука в длл выглядит примерно так:
Код:
function StopHook: Boolean; export;
begin
if PHookRec1<>nil
then
begin
UnmapViewOfFile(PHookRec1); //если создавали FileMapping
CloseHandle(hMemFile);
PHookRec1:=nil;
end;
if Hooked
then Result:=UnhookWindowsHookEx(hKeyHook)
else Result:=true;
Hooked:=false;
end;
а высвобождение длл происходит после FreeLibrary(DLLInstance) (если вы подключали ее динамически).
на счет второго вопроса я сомневаюсь, что сделал правильно, поэтому публиковать не буду.