C#和delphi之间的命名管道通信

得瑟的雪茄 2012-03-01 12:16:44
要实现的功能:C#作为服务端接收文本 delphi作为客户端发送文本

我从网上找了两份管道通信,C#服务端和客户端通信没问题,delphi也没问题。

现在我要用C#作为服务端 delphi作为客户端实现通信,创建管道实例和创建管道连接都没问题,问题是delphi写进去的文本C#解析不出来, 代码参考如下:
注:C#的api函数参数的定义
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool ReadFile(
IntPtr hHandle, byte[] lpBuffer,
uint nNumberOfBytesToRead,
byte[] lpNumberOfBytesRead,
uint lpOverlapped,
uint lpOverlapped
);
delphi写入的参数:
bytesWrite:DWORD;
WriteFile(pipeHandle,pchar('文本')^,length('文本'),bytesWrite,nil);

C#去读参数的时候
byte[] numReadWritten = new byte[4];
byte[] intBytes = new byte[4];

NamedPipeNative.ReadFile(pipeHandle, intBytes, 4, numReadWritten, 0);

int len = BitConverter.ToInt32(intBytes, 0);

byte[] recBuffer=new byte[len];

NamedPipeNative.ReadFile(pipeHandle, recBuffer, (uint)len, numReadWritten, 0);

// 取得客户端发送的信息
string str=Encoding.UTF8.GetString(recBuffer);//解析二进制?程序走到此处鼠标放到str显示\0\0\0\0\0\0\0\0点进去显示空。

现在C#是读不出来delphi写进去的pchar('文本')^ ,我现在的理解是C#处理的是二进制,delphi传入的是指针?C#定义api函数readfile的时候定义的第二个参数类型是byte数组,那么delphi需要传入什么样的值呢?二进制?我想C#和delphi在符合api函数接口的条件下,把数据类型一致了是不是就行了?请高手帮忙!


...全文
213 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangweisk 2012-09-18
  • 打赏
  • 举报
回复
上面的回复看不见
首都狂热 2012-03-05
  • 打赏
  • 举报
回复
再好好看看。
得瑟的雪茄 2012-03-05
  • 打赏
  • 举报
回复
自己想想!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧