обмен данными через каналы между C # и cPython - PullRequest
4 голосов
/ 09 ноября 2010

У меня есть то, что (я думаю) является относительно простой задачей.Я должен предоставить некоторому приложению C # способ вызывать мое приложение Python и передавать некоторые данные для обработки и получения результатов в конце задачи Python (оба приложения GUI.

Я думал, что каналы будутхорошо выполняйте работу со стороной C #, создавая именованный канал, таким образом

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

    {// Wait for a client to connect

         pipeServer.WaitForConnection();

приложение может p / вызывать приложение python, передавая имя канала в sysarg и т. д.

нана стороне Python, как только имя канала известно и использование win32pipe должно работать, например,

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

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

.

Что происходит, когда C # обнаруживает входящее соединение, но сторона Python "падает" напечально известная ошибка: (87, «CallNmaedPipe», «Неверный параметр»).

Я не специалист по каналам и не могу понять, что здесь может быть не так.

1 Ответ

1 голос
/ 09 ноября 2010

CallNamedPipe требует канал, созданный в PIPE_TYPE_MESSAGE;ваш код C # создает канал в PIPE_TYPE_BYTE.Поэтому вам нужно либо создать канал в режиме сообщений в C # (используя конструктор, который ожидает PipeTransmissionMode), либо использовать WriteFile для помещения данных в канал.

...