public VolumeHeader GetVolumeHeader() { try { VolumeHeader v = new VolumeHeader(); int structSize = Marshal.SizeOf(v.GetType()); //Marshal.SizeOf(typeof(Student)); IntPtr buffer = Marshal.AllocHGlobal(structSize); Marshal.StructureToPtr(v, buffer, true); // ... send buffer to dll cppToCsharpAdapter.getVolumeHeader(this.myDiskPointer, buffer); Marshal.PtrToStructure(buffer, v); // free allocate Marshal.FreeHGlobal(buffer); return(v); } catch (SEHException) { IntPtr cString = cppToCsharpAdapter.getLastDiskErrorMessage(this.myDiskPointer); string message = Marshal.PtrToStringAnsi(cString); throw new Exception(message); } catch { throw; } }
static void Main(string[] args) { try { int structSize = Marshal.SizeOf(typeof(VolumeHeader)); Console.WriteLine("Marshal.SizeOf(typeof(VolumeHeader) == " + structSize); Disk d = new Disk(); Console.WriteLine("\nMake Disk:"); Console.WriteLine(ToStringProperty(d.GetVolumeHeader())); d.Createdisk("disk1", "oshri"); Console.WriteLine("\nCreate Disk:"); Console.WriteLine(ToStringProperty(d.GetVolumeHeader())); d.Mountdisk("disk1"); d.Format("oshri"); Console.WriteLine("\nFormat Disk:"); Console.WriteLine(ToStringProperty(d.GetVolumeHeader())); VolumeHeader tmp = d.GetVolumeHeader(); Console.WriteLine("Disk_Owner: {0}", tmp.DiskOwner); Console.WriteLine("Disk_Name: {0}", tmp.DiskName); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e.Message); Console.ResetColor(); } Console.WriteLine("After: ******************************************\n"); Console.ReadLine(); }