2010-11-09 6 views
4

J'ai ce que (je pense) est une tâche relativement simple. Je dois fournir à certaines applications C# un moyen d'invoquer mon application Python et de transmettre des données pour le traitement et de recevoir les résultats à la fin de la tâche Python (les deux sont des applications GUI.)échanger des données via des tuyaux entre C# et cPython

Je pensais que les tuyaux feraient le travail bien avec le côté C# créer un tube nommé ainsi

using (NamedPipeServerStream pipeServer = 
    new NamedPipeServerStream("Demo", PipeDirection.InOut))  

    {// Wait for a client to connect 

     pipeServer.WaitForConnection(); 

l'application peut p/invoquer l'application python passant le nom du tuyau dans sysarg, etc.

sur le côté python, une fois que le tuyau nom est connu et en utilisant win32pipe quelque chose comme

message = 'a test' 
pipeName = '\\\\.\\pipe\\Demo' 

win32pipe.CallNamedPipe(pipeName, message, 4096 , win32pipe.NMPWAIT_WAIT_FOREVER) 

devrait fonctionner.

Ce qui se passe est que le C# détecte la connexion entrante mais le côté python « plantages » sur une erreur infâme. (87, 'CallNmaedPipe »," Le paramètre est incorrect)

Je ne suis pas expert

Répondre

1

CallNamedPipe nécessite un canal créé dans PIPE_TYPE_MESSAGE, votre code C# crée un canal dans PIPE_TYPE_BYTE Vous devez donc créer un canal en mode message en C# (à l'aide d'un constructeur qui attend PipeTransmissionMode), ou utilisez WriteFile pour mettre des données dans le canal

Questions connexes