ReadRawVarint32() 的问题 - Google Protocol Buffers csharp-port
Posted
技术标签:
【中文标题】ReadRawVarint32() 的问题 - Google Protocol Buffers csharp-port【英文标题】:Problems with ReadRawVarint32() - Google Protocol Buffers csharp-port 【发布时间】:2011-11-02 14:17:15 【问题描述】:我正在尝试使用 Google 协议缓冲区(具体而言,Jon Skeet 的 csharp-port)从服务器中的客户端接收一些数据。我执行以下操作:
using Google.ProtocolBuffers;
...
Stream InputStream = client.GetStream();
CodedInputStream input = CodedInputStream.CreateInstance(InputStream);
...
uint length = CodedInputStream.ReadRawVarint32(InputStream);
我从最后一行收到一条我无法解决的错误消息:需要对象引用才能访问非静态成员 'Google.ProtocolBuffers.CodedInputStream.ReadRawVarint32()'。
基本上我想做的在java版本中是这样的:
InputStream iStream = client.getInputStream();
CodedInputStream input = CodedInputStream.newInstance(iStream);
int read = is.read();
if(-1 != read)
int length = CodedInputStream.readrawVarint32(read, is);
byte[] bytes = input.readRawBytes(length);
// My proto stuff
Communication.Packet container = null;
try
container = Communication.Packet.parseFrom(bytes);
catch (InvalidProtocolBufferException iPBE)
continue;
AbstractMessage message = container;
if(container.hasLogin())
message = container.getLogin();
System.out.println(message.toString());
有什么帮助吗?
提前致谢。
【问题讨论】:
【参考方案1】:错误消息表明您正在尝试访问非静态(即成员方法)而不使用对象引用。您需要更改您的方法调用以操作 CodedInputStream 类型的对象,而不是 CodedInputStream 类:
input.ReadRawVarint32();
【讨论】:
以上是关于ReadRawVarint32() 的问题 - Google Protocol Buffers csharp-port的主要内容,如果未能解决你的问题,请参考以下文章
g++ -m32 在 debian amd64 上找不到 libstdc++
将 32 位和 64 位 .so 文件与 g++ 链接以用于 c++ 程序
使用 g++ -march=x86-64 构建的代码可以在 32 位操作系统上运行吗?