эта проблема решена. изменяя смещение, расположенное в 8 и 12, и изменяя параметр указателя на другое значение.
ешно извлек структурный объект из допустимого указателя, используя функцию PtrToStructure (в VB.NET), но результат некоторых членов объекта не корректен (по сравнению с примером C ++):
код:
StructLayout(LayoutKind.Explicit, pack:=1, CharSet:=CharSet.Ansi)> _
Public Structure MyStruct
<FieldOffset(0)> _
Dim Width As UInt32 ' 350 correct
<FieldOffset(4)> _
Dim Height As UInt32 ' 466 correct
<FieldOffset(20)> _
Dim Buffer As IntPtr ' variable but correct
<FieldOffset(24)> _
Dim BufferPitch As Integer ' 1408 correct
<FieldOffset(16)> _
Dim SurfaceType As Integer ' -2147483645 correct
<FieldOffset(unknow)> _
Dim WindowWidth As UInt32 ' must be 356, tested from 0 to 230
<FieldOffset(unknow)> _
Dim WindowHeight As UInt32 ' must be 495, tested from 0 to 100
<FieldOffset(15)> _
Dim ScreenHeight As UInt32 ' 768 correct
<FieldOffset(36)> _
Dim ScreenWidth As UInt32 ' 1366 correct
<FieldOffset(44)> _
Dim ScreenDepth As UInt32 ' 32 correct
End Structure
я не могу найти точные значения для параметра FieldOffset WindowWidth и WindowHeight. вопрос почему и как их исправить?
struct myStruct
{
U32 Width; // U32 = 32-bit unsigned integer
U32 Height;
VOID_PTR Buffer;
S32 BufferPitch; // 32-bit signed integer
COPY_FLAGS SurfaceType; // integer
U32 WindowWidth;
U32 WindowHeight;
U32 ScreenWidth;
U32 ScreenHeight;
U32 ScreenDepth;
}