如何在 C# 中读取 CArchive 布尔值
Posted
技术标签:
【中文标题】如何在 C# 中读取 CArchive 布尔值【英文标题】:How to read CArchive booleans in c# 【发布时间】:2015-04-30 18:00:53 【问题描述】:我有一些东西用 C++ 写入存档,以便用 C# 读取。这是c++代码
CString str= "string value";
BOOL firstBool=false;
BOOL secondBool= True;
Bool thirdBool= true;
CMemFile file(DataBlob->GetData(), dLength);
CArchive ar(&file, CArchive::load);
ar << str<<firstBool<<secondBool<<thirdBool;
这是我在 C# 中的阅读方式
var br = new BinaryReader(new MemoryStream(file));
var strCSharp= br.ReadString();
var firstBoolCSharp= br.readBoolean();
var secondBoolCSharp= br.readBoolean();
var thirdBoolCSharp= br.readBoolean();
问题:我无法在 c# 中读取第一个、第二个和第三个布尔值。可能是什么问题?
【问题讨论】:
不是一个直接的答案,但我会编写一个快速的 C++/CLI DLL,它会使用 MFC 读取 CArchive 并移交给 .Net 类。 我不了解 CLI,你能指点我其他方向吗 以@crashmstr 方式继续:无需考虑 CLI,您可以编写一个小 C++ dll,它会公开读取文件的方法,然后您必须将 DLL 的函数导入到你的 C# 代码,你就完成了:DllImport doc:msdn.microsoft.com/en-us/library/aa984739(v=vs.71).aspx 您不能使用 ReadString(),它只有在字符串由 BinaryWriter 写入时才有效。您必须首先阅读字符串长度,这是火箭科学,然后是字符串中的字符。使用 AfxReadStringLength() 中的代码来正确处理。 如果您只想使用 C#,您可能需要查看文件并确保您正在读取正确的类型(即BOOL
不是 bool
和 @ 987654326@ 可能行不通)。
【参考方案1】:
我终于解决了。
C++ 将布尔值写入整数“0”或“1”。因此,在 C# 的阅读方面,它应该 C#: bool result= binaryReader.ReadInteger()>0;
来确定它是真还是假。
这解决了我的问题。
【讨论】:
以上是关于如何在 C# 中读取 CArchive 布尔值的主要内容,如果未能解决你的问题,请参考以下文章