1

我正在尝试在 Clojure 中创建 C 风格的结构,因此我可以从 Clojure 调用文档记录不佳的 C++ API。

该 API 旨在发送和接收序列化的 protobuf 消息(好的),前面是 C Header 结构(坏的)。初始握手是一个 RPCHandshakeHeader 结构体,该过程大致描述在下面的代码中:

struct RPCHandshakeHeader {
    char magic[8];
    int version;

    static const char REQUEST_MAGIC[9];
    static const char RESPONSE_MAGIC[9];
};
[...snip...]

const char RPCHandshakeHeader::REQUEST_MAGIC[9] = "FooBar?\n";
[...snip...]

RPCHandshakeHeader header;
memcpy(header.magic, RPCHandshakeHeader::REQUEST_MAGIC, sizeof(header.magic));
header.version = 1;

socket = new CActiveSocket();
socket->Initialize();
socket->Open((const uint8 *)"localhost", 5000);

socket->Send((uint8*)&header, sizeof(header));
[...code to read response...]

我怎样才能在clojure中做到这一点?我需要使用JNA /JNI 吗?

有没有办法创建一个 C 结构,将其转换为二进制并通过套接字发送?(我认为这是我需要做的)

4

1 回答 1

2

听起来像是光泽度的工作!我不知道这部分 API 的细节,但是你想特别看一下compile-frame, 和repeated字符串。

于 2012-04-23T18:56:37.180 回答