2010-01-14 2 views
1

У меня есть API для игры, которая вызывает методы в dll C++, вы можете писать боты для игры, модифицируя DLL и вызывая определенные методы. Это прекрасно, если только я не большой поклонник C++, поэтому решил использовать именованные каналы, чтобы я мог отправлять игровые события по каналу в клиентскую программу и отправлять команды обратно - тогда C++ -это просто простая структура для отправки прослушивания по именованному каналу.Interprocess communication

У меня есть некоторые методы, как это на # стороне C вещей:

private string Read() 
{ 
    byte[] buffer = new byte[4096]; 

    int bytesRead = pipeStream.Read(buffer, 0, (int)4096); 

    ASCIIEncoding encoder = new ASCIIEncoding(); 
    return encoder.GetString(buffer, 0, bytesRead); 
} 

private void Write(string message) 
{ 
    ASCIIEncoding encoder = new ASCIIEncoding(); 
    byte[] sendBuffer = encoder.GetBytes(message); 
    pipeStream.Write(sendBuffer, 0, sendBuffer.Length); 
    pipeStream.Flush(); 
} 

Что бы эквивалентные методы на стороне C++ вещей?

ответ

1

После того, как вы создали трубку и имеете ручки труб, вы читаете и записываете с использованием API-интерфейсов ReadFile и WriteFile: см. Named Pipe Client в MSDN для примера кода.


Однако, я в догадках, как именно их использовать.

Раздел «Клиент имен», который я привел выше, дает пример того, как их использовать.

Например, каковы типы всех аргументов

Типы всех аргументов определены в MSDN: см ReadFile и WriteFile

как я конвертировать из буфер байтов, который я предположительно получаю из метода ReadFile в строку и наоборот/наоборот?

Вы отправляете строку с использованием ASCIIEncoding, поэтому вы получите строку символов, отличных от Юникода.

Вы можете конвертировать, что в строку, используя перегрузку станд :: струнной конструктор, который принимает указатель на символьный буфер плюс sencond параметр, который определяет, сколько символов в буфере:

//chBuf and cbRead are as defined in the 
//MSDN "Named Pipe Client" example code fragment 
std::string received((const char*)chBuf, cbRead); 
+0

Спасибо, я понимаю, что ReadFile и WriteFile эквивалентны pipestrea.Write/Read в моем примере. Тем не менее, я в убытке точно, как их использовать. Например, каковы типы всех аргументов, как мне преобразовать из буфера байтов, который я предположительно получаю из метода ReadFile в строку и наоборот/наоборот? – Martin

+0

Я отредактировал свой ответ, чтобы ответить на дополнительные вопросы в вашем комментарии. – ChrisW

Смежные вопросы