English 中文(简体)
采用C++的C#类。 • 如何协调?
原标题:Serialize a C# class to binary be used by C++. How to handle alignment?
  • 时间:2009-09-04 19:28:14
  •  标签:
问题回答

您不妨考虑不要将<代码>tructs上载到记忆中。 只是读一下的是帝国主义的一步。 类似:

struct A {
    uint8_t  aByte;
    uint32_t aDWord;
    uint16_t aWord;
};

void serialize(FILE* fp, A const& aStruct) {
    fwrite(&aStruct.aByte,  sizeof(aStruct.aByte),  1, fp);
    fwrite(&aStruct.aDWord, sizeof(aStruct.aDWord), 1, fp);
    fwrite(&aStruct.aWord,  sizeof(aStruct.aWord),  1, fp);
}

void deserialize(FILE* fp, A& aStruct) {
    fread(&aStruct.aByte,  sizeof(aStruct.aByte),  1, fp);
    fread(&aStruct.aDWord, sizeof(aStruct.aDWord), 1, fp);
    fread(&aStruct.aWord,  sizeof(aStruct.aWord),  1, fp);
}

而不是:

void serialise(FILE* fp, A const& aStruct) {
    fwrite(&aStruct, sizeof(aStruct), 1, fp);
}

void deserialise(FILE* fp, A& aStruct) {
    fread(&aStruct, sizeof(aStruct), 1, fp);
}

第一个例子取决于结构包装规则,而第二个例子就是这种情况。 我建议使用斜线。 多数语言(不肯定是C#)给你某种读写方式,使你能够读写所有序列化/代号化成员,而不是单体记忆组,包装/包裹问题消失。

考虑在作者方面使用C++图书馆。 如果读者一方受限制,则在未管理的C++中建立具有相同记忆结构,并将其丢到双亲档案中。 也许,你不得不使用第Ppragma 包装(1),去除缺省包装,在贵方结构要素之间划出一些术语,以便与读者方的配对相类似。 Don tabes on endianness. 然后,仅用DllImport或C++/CLI(这是一个塔特问题)向作者图书馆打电话。





相关问题
热门标签