I have this source code in C# that performs CD burning:
CDDrive Drive;
Drive = new CDDrive();
if ( Drive.Open(CDDrive.GetCDDriveLetters()[0]) ) //Get the first CD drive
in the system.
{// We have access to CD drive
if ( Drive.IsCDReady() )
{ //There is a CD in the drive
if ( Drive.Refresh() )
{ //TOC have been read
int Tracks = Drive.GetNumTracks();
byte[] Buffer = new byte[4096];
Drive.LockCD();
try
{
for (int i = 1; i <= Tracks; i++)
{
Stream Strm = new FileStream(string.Format("track{0:00}.raw", i),
FileMode.Create, FileAccess.Write);
try
{
uint Size = 0;
while ( Drive.ReadTrack(i, Buffer, ref Size, null) > 0 )
//If there is no error and datawas read
//successfully a positive number is returned
{
Strm.Write(Buffer, 0, (int)Size);
}
}
finally
{
Strm.Close();
}
}
}
finally
{
Drive.UnlockCD();
}
}
}
}
#define MAXIMUM_NUMBER_TRACKS 100
typedef struct TRACK_DATA
{
UCHAR Reserved;
UCHAR Control : 4;
UCHAR Adr : 4;
UCHAR TrackNumber;
UCHAR Reserved1;
UCHAR Address[4];
} TRACK_DATA;
typedef struct CDROM_TOC
{
UCHAR Length[2];
UCHAR FirstTrack;
UCHAR LastTrack;
TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];
} CDROM_TOC;
[StructLayout( LayoutKind.Sequential )]
public class CDROM_TOC
{
public ushort Length;
public byte FirstTrack = 0;
public byte LastTrack = 0;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MAXIMUM_NUMBER_TRACKS)]
public TRACK_DATA[] TrackData;
public CDROM_TOC()
{
TrackData = new TRACK_DATA[MAXIMUM_NUMBER_TRACKS];
Length = (ushort)Marshal.SizeOf(this);
}
}
[ StructLayout( LayoutKind.Sequential )]
public class TrackDataList
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MAXIMUM_NUMBER_TRACKS*8)]
private byte[] Data;
public TRACK_DATA this [int Index]
{
get
{ /* Code in the source files */
}
}
public TrackDataList()
{
Data = new byte[MAXIMUM_NUMBER_TRACKS*Marshal.SizeOf(typeof(TRACK_DATA))];
}
}
[StructLayout( LayoutKind.Sequential )]
public class CDROM_TOC
{
public ushort Length;
public byte FirstTrack = 0;
public byte LastTrack = 0;
public TrackDataList TrackData;
public CDROM_TOC()
{
TrackData = new TrackDataList();
Length = (ushort)Marshal.SizeOf(this);
}
}
Can anybody port this C# code to Visual Basic?
JohnDBCT
//jp;//