2013-04-08 2 views
0

Quels sont les privilèges des messages Windows?Windows Messages Privilèges

Dans l'application 1, j'ai posté un message à la demande 2:

PostMessage(handle, WM_LOCAL, 0, Integer(Lst)); 

Dans l'application 2, la mise en œuvre du message:

var l: TStringList; 
begin  
    ShowMessage('got 1'); 
    l := TStringList(Message.LParam); 
    ShowMessage('got 2'); 
    Memo1.Clear; 
    ShowMessage('got 3'); 

    if Memo1 = nil then 
    ShowMessage('nil'); 

    //HERE : Access violation. 
    //Memo1.Text := l.Text; 
    //ShowMessage('got 4'); 

    Memo1.Lines.Add('good!'); 
    ShowMessage('got 5'); 

    l.Free;  
    ShowMessage('got 6'); 

    //Access violation Too.. 
    Memo1.Repaint; 
    ShowMessage('got 7'); 

Pourquoi cela se produit?

Je ne peux pas non plus repeindre le mémo ni accéder à la propriété Text.

Répondre

5

Vous ne pouvez pas partager d'objets entre des applications. Même le pointeur pointe vers l'espace d'adressage de la destination.
Peut-être WM_COPYDATA répondra à vos besoins en matière de copie de données.

+0

il est impossible de sérialiser l'objet? – EProgrammerNotFound

+0

c'est une autre question ... – bummi

3

Ce ne sont pas des messages qui ont des privilèges, mais plutôt des processus. La fonctionnalité est connue sous le nom User Interface Privilege Isolation (UIPI). Cette fonctionnalité arrête les processus de niveau d'intégrité inférieurs qui envoient des messages à des processus de niveau d'intégrité supérieur.

Mais ce n'est pas votre problème. Votre problème est que chaque processus a un espace d'adressage distinct. Ainsi, un pointeur d'un processus ne signifie rien dans un processus différent. C'est pourquoi vous rencontrez une violation d'accès. Le pointeur que vous recevez pointe vers la mémoire dans un processus différent et n'a donc aucun sens.

Vous devez utiliser un mécanisme de communication inter-processus (IPC). Par exemple, l'envoi d'un message WM_COPYDATA, ou des canaux nommés, ou des sockets et ainsi de suite.

+0

il n'y a aucun moyen que je puisse sérialiser l'objet? – EProgrammerNotFound

+0

je vais changer le sujet ... – EProgrammerNotFound

+4

S'il vous plaît ne pas changer de sujet. Vous avez posé cette question et nous avons répondu à cette question. Si vous changez la question, nos efforts sont gaspillés. –

Questions connexes