Reading Binary file created by VC++

G

Guest

Hi,

My VS 2005 VB app reads a binary file that was created by a VS 2005 VC++
WinCE app. The VC++ app writes the following structure to the file.

typedef struct {
short ID;
TCHAR Num[10];
} PARTS_STRUCT;

In my VB code I read the file with this code...

<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Public Structure Parts_Struct
Public ID As Short
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=10)> _
Public Num As String
End Structure

Dim Parts As New Parts_Struct
Dim fs As New FileStream(FName, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs)
Parts.ID = br.ReadInt16()
Parts.Num = br.ReadChars(10)

In the binary file, the Num fiedl contains the text "123".

When I run the code, the ID field is Ok, but I only get the 1st letter if
the "Num" field ("0")..

If I change the Num field type to Char(), it gets filled with this...
Num[0] = "1"
Num[1] = Nothing
Num[2] = "2"
Num[3] = Nothing
Num[4] = "3"
Num[5] = Nothing

I also tried changing the "CharSet" parameter in the Structlayout() to Ansi
and Unicode, bit still get the same results.

Looks like I am close, but still missing something.
Can anyone point me in the right direction?

RML
 
T

tomb

RML said:
Hi,

My VS 2005 VB app reads a binary file that was created by a VS 2005 VC++
WinCE app. The VC++ app writes the following structure to the file.

typedef struct {
short ID;
TCHAR Num[10];
} PARTS_STRUCT;

In my VB code I read the file with this code...

<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Public Structure Parts_Struct
Public ID As Short
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=10)> _
Public Num As String
End Structure

Dim Parts As New Parts_Struct
Dim fs As New FileStream(FName, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs)
Parts.ID = br.ReadInt16()
Parts.Num = br.ReadChars(10)
The file is binary - you can't read characters, you have to read bytes
and then convert them into a string.

T
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top