【问题标题】:How to read CArchive booleans in c#如何在 C# 中读取 CArchive 布尔值
【发布时间】: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@ 可能行不通)。

标签: c# c++ .net c#-4.0 visual-c++


【解决方案1】:

我终于解决了。

C++ 将布尔值写入整数“0”或“1”。因此,在 C# 的阅读方面,它应该 C#: bool result= binaryReader.ReadInteger()&gt;0; 来确定它是真还是假。

这解决了我的问题。

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 2014-10-19
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多