Vous ne pouvez pas utiliser WM_COPYDATA
sans fenêtre pour l'envoyer. Si vous n'utilisez pas de classes, vous devrez utiliser les fonctions Win32 API RegisterClass()
et CreateWindow/Ex()
directement pour allouer une fenêtre et fournir votre propre fonction autonome pour sa procédure de gestionnaire de messages.
Mais pourquoi ne pas utiliser les classes? Ensuite, vous pouvez tirer parti des systèmes intégrés de gestion des messages du RTL. À tout le moins, vous pouvez utiliser AllocateHWnd()
avec une méthode statique de sorte que vous n'avez pas à instancier un objet de classe à l'exécution, par exemple:
type
TWindowMessages = class
public
class procedure WndProc(var Message: TMessage);
end;
class procedure TWindowMessages.WndProc(var Message: TMessage);
begin
//...
end;
var
Wnd: HWND;
Wnd := AllocateHWnd(TWindowMessages.WndProc);
// pump the message queue for new messages as needed...
DeallocateHWnd(Wnd);
Si cela ne répond pas à vos besoins, alors vous devriez envisager une mécanisme IPC différent qui ne dépend pas des fenêtres, telles que les canaux nommés, les mailslots, les sockets, etc.
Jetez un oeil à WM de WM_COPYDATA, il est construit à partir de WindowMessage. Donc, c'est en fait un message envoyé à une fenêtre. Mais pas seulement un TForm est une fenêtre. Presque tout ce que vous pouvez voir sur votre écran est basé sur une fenêtre. C'est pourquoi MS a appelé leur produit Windows; o) –