DeviceIoControl

29/04/2008 - 23:42 von Martin Roesler | Report spam
Tag zusammen,

sitze seit langem mal wieder am VB6 und habe so meine
Verstàndnisschwierigkeiten. Könnte mir jemand auf die Spünge helfen, wie
folgender C# source in VB6 umzusetzen ist...
Ich liste einfach mal auf, was ich getan habe und wo es hakt.

C#:
handle = CreateFile(@"\\.\ShockMgr", GENERIC_READ, FILE_SHARE_READ,
IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);

VB6:
Dim hFile As Long
hFile = CreateFile("\\.\ShockMgr", GENERIC_READ, FILE_SHARE_READ, None,
OPEN_EXISTING, 0, 0)

soweit ok.. das filehandle bekomme ich in vb6

C#:
uint dwRead = 0;
private const uint IOCTL_SHOCKMGR_READ_ACCELEROMETER_DATA = 0x733fc;
DeviceIoControl(handle, IOCTL_SHOCKMGR_READ_ACCELEROMETER_DATA, IntPtr.Zero,
0, ref sample, 0x24, ref dwRead, IntPtr.Zero))

VB6:
DeviceIoControl(hFile, &H733FC, 0, 0, sample, &H24, 0, ByVal 0)

Hier kommt dann nichts bei rum... ich denke, ich habe irgendwas falsch
gemacht. (ein byref sample mag vb nicht)


"sample" hat folgenden struct/type:

C#
private struct AccelerometerData
{
internal int status;
internal short x0;
internal short y0;
short x1;
short y1;
short x2;
..
short unknown0;
short unknown1;
}

VB6:
Private Type AccelerometerData
status As Integer
x0 As Integer
y0 As Integer
x1 As Integer
y1 As Integer
x2 As Integer
...
bla
End Type


Ich hoffe, ich hab mich verstàndlich ausgedrückt...

Achso ja, es geht dabei um den Beschleuningungssensor von IBM Notebooks

Gruß
Martin
 

Lesen sie die antworten

#1 Thorsten Albers
30/04/2008 - 00:57 | Warnen spam
Martin Roesler schrieb im Beitrag
<#...
VB6:
Dim hFile As Long
hFile = CreateFile("\\.\ShockMgr", GENERIC_READ, FILE_SHARE_READ, None,
OPEN_EXISTING, 0, 0)



Wie sieht die Deklaration von CreateFile() aus?
Was ist "None"?

soweit ok.. das filehandle bekomme ich in vb6



Bist Du sicher? Ist die Rückgabe nicht doch vielleich INVALID_HANDLE_VALUE?

VB6:
DeviceIoControl(hFile, &H733FC, 0, 0, sample, &H24, 0, ByVal 0)



Wie sieht die Deklaration von DeviceIoControl() aus?

C#
internal int status;

VB6:
Private Type AccelerometerData
status As Integer



C# 'int' belegt 32-Bit. Also 'Status As Long'.

-
Thorsten Albers albers(a)uni-freiburg.de
-

Ähnliche fragen