如何在 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()&gt;0; 来确定它是真还是假。

这解决了我的问题。

【讨论】:

以上是关于如何在 C# 中读取 CArchive 布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何读取数组中所有函数的布尔值(真/假)

如何从 Access 数据库中读取是/否值作为布尔值?

如何添加布尔值以形成内容 C#

从数据库中读取布尔值?

如何扩展库类的功能?

如何检查我正在覆盖的单个异步 C# 任务的布尔返回值? [复制]