【发布时间】: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++