procedure Callback(Wnd: HWND; Msg: UINT; Data: Pointer; Result: LRESULT); stdcall;
begin
 //何かする
end;

procedure TXXX.METHOD;
begin
 SendMessageCallback(Handle, WM_APP, 0, 0, @Callback, 0);
end;

こんな感じです。
OutputDebugString入れても、他のスレッドから呼んだ時だけCallbackに来てない。
単に、そのままやりたいことをするとデッドロックするので、PostMessage的に使ってるだけなんですが。
(素直にPostMessage使わない理由はSendMessageCallbackだと相手のウィンドウ関数を書き換えずに済むから)