1
私はClojureでCスタイルの構造体を作成しようとしています。そのため、Clojureからはあまり記述されていないC++ APIを呼び出すことができます。ClojureでCスタイルの構造体を作成するにはどうすればよいですか?
APIは、シリアル化されたprotobufメッセージ(good)に先立ってC Header構造体(bad)を送受信するように設計されています。初期ハンドシェイクは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構造体を作成し、それをバイナリに変換してソケット上に送信する方法はありますか? (私はと思ってこれは私がする必要があります)
私が持っていたのは、リトルエンディアンのサポートがありませんでしたが、エンディアンスワップ機能を作るのは難しくありませんでした。ありがとう:) – Annan