我有2个库,一个是c ++,另一个是c#。
C ++库的名称-> LibA
C#-> LibB的名称
在LibA中,将有2个主要API:
- Serialize->序列化API将使用给定的输入生成IStream作为输出。
- Deserialize-> Deserialize API将IStream作为输入并反序列化流并从中获取实际数据。
#pragma once
struct GPosition
{
double x;
double y;
double z;
};
struct GUnitVector
{
double x;
double y;
double z;
};
struct GLine
{
GPosition m_rootPoint; /* Point on the line,should be in region of interest */
GUnitVector m_direction; /* Gradient */
double m_start; /* Parameter of start point,must be <= m_end */
double m_end; /* Parameter of end point */
};
class GraphicSerializer
{
public:
GUID objectID;
uint32_t aspectID;
uint32_t controlflag;
vector<const GLine *> geomVector;
void Serialize(IStream &pStream);
void Deserialize(IStream* pStream);
};
在LibB中,将有4个API:
- Object GetObjectFromStream(Stream s)->将流作为输入并反序列化并返回Objects
- PutToDB(Object A)->将给定的对象持久保存到DB
- Stream GetStreamFromObject(Object a)->将对象作为输入序列化并返回。
- Object GetFromDB(objectID)->根据ID从数据库获取对象
public class CommonBase
{
public Guid id { get; set; };
public byte[] Bytes { get; set; } //contains aspect,control flag,vec<GLine>
};
public interface IGraphicRepository
{
CommonBase Get(Guid guid);
bool Put(CommonBase graphic);
}
public static class GraphicStreamUtility
{
public static CommonBase getcommonBaseFromStream(Stream stream);
public static void SerializeCommonBaseToStream(CommonBase obj,Stream stream);
}
现在,我正在编写C ++ / CLI,以使用libA在libB中生成的流,反之亦然。这样我就可以持久地从数据库中检索对象。
任何人都可以让我知道如何将IStream转换为.Net Stream和将.Net流转换为IStream。