【发布时间】:2015-06-13 08:49:14
【问题描述】:
我想知道是否有人对此有任何见解。
我有一个本地 C++ 对象(在 DLL 中),它使用 boost::archive 写入它的数据。
该项目由 C# 应用程序使用(通过 C++/CLI 类),我想将其中几个存档存储在压缩文件中。我在 C# (DotNetZipFile) 中使用 Ionic.Zipfile。
目前,我正在写入一个临时文件,然后使用 ZipFile.UpdateFile 添加到存档,但想避免中间人。
所以,这就是我想要的:
C#:
ZipEntry ae = archive.UpdateEntry("Project", (f, stream) =>
{
pManagedObjectWrapper.Save(stream);
});
C++/CLI:
void ManagedObjectWrapper::Save(System::IO::Stream ^ stream)
{
std::ofstream *myofstream = MAGICALFunction(stream);
pUnmanagedObject->Save(myofstream);
}
C++:
void UnmanagedObject::Save(std::ofstream *myofstream)
{
boost::archive::binary_oarchive oa(*myofstream);
oa << *this;
}
对MAGICALFunction 有什么帮助吗?
【问题讨论】:
-
您可以/需要将
streambuf或ostream子类化为一个充当adapter 到System.IO.Stream的类,然后将其传递给UnmanagedObject::Save()。不适合胆小的人。
标签: c# c++ boost c++-cli archive