Hi -
I'm struggling with a C# program to read binary records from a database. The records were created with Borland Delphi. Here's an example
Code:
// Delphi record definition
tBowler_Rec = Record
public
gender : tGender;
bowler_num : byte;
name : tString32;
initials : String[3];
...
Code:
// Corresponding C# definition (unmanaged code)
[StructLayout(LayoutKind.Sequential, Pack=4)]
public unsafe struct tBowler_Rec
{
public tGender gender;
public byte bowler_num;
public fixed byte name[32];
public fixed byte initials[3];
...
I'm actually able to read this binary struct out of a SQL Server database and see the data in the Visual Studio debugger. Yay! I'm able to access fields like "gender" and "bowler_num" with no problem. Yay!
Q: How do I turn "name" into a C# string?
An example name is "ASHTON". It's a Pascal string (byte count, followed by ASCII characters). It looks like this in memory:
Code:
\0x6ASHTON\0x0\0x0...
Here's how I'm trying to access it:
Code:
[StructLayout(LayoutKind.Sequential, Pack=4)]
public unsafe struct tBowler_Rec
{
public tGender gender;
public byte bowler_num;
public fixed byte name[32];
...
public string Name
{
get
{
StringBuilder sb = new StringBuilder();
int ilen = name[0];
for (int i = 1; i <= ilen; i++)
sb.Append(name[i]);
return sb.ToString();
}
}
I'm getting this error:
Quote:
Error: You cannot use fixed size buffers contained in unfixed expressions. Try using the fixed statement.
|
Help?????
Thank you in advance!