MIT писал(а):Объясните, пожалуйста, что из себя представляет сабж, как и что хранит в себе, какое представление своих данных имеет в памяти.
Класс Type является корневым классом для функциональных возможностей пространства имен System.Reflection и основным способом доступа к метаданным. С помощью членов класса Type можно получить сведения об объявленных в типе элементах: конструкторах, методах, полях, свойствах и событиях класса, а также о модуле и сборке, в которых развернут данный класс.
Public Structure s11
Dim t As System.Type
End Structure
MsgBox(Marshal.SizeOf(New s11 With {.t = GetType(Mitirus.Graphics.GLayerEx)}))
Это размер указателя. Реально размер этого класса будет другой.MIT писал(а):КодГоворит "4"...
- Код: Выделить всё
MsgBox(Marshal.SizeOf(New s11 With {.t = GetType(Mitirus.Graphics.GLayerEx)}))
Зачем?MIT писал(а):Ну я уже понял что это указатель - значение меняется при каждом запуске.
Теперь надо из того класса вытащить чего-нибудь полезное. А лучше - записать туда свое... Или поменять указатель...
А где это действительно нужно?MIT писал(а):Да я все еще не могу успокоиться на счет идеи использования двумя массивами одного места в памяти.
Что за источник? Ссылка есть?MIT писал(а): Из умных источников вычитал (правда не понял до конца), что этот тип там не обязателен.
Это действительно нужно, пусть и применение не очевидно. А до менеджера может как-нибудь дорасту, если с этим получиться, конечно.Nord777 писал(а):А где это действительно нужно?
И что-то мне кажется это не получится.
Я понимаю если бы ты сделал какой-нибудь менеджер "двойных" массивов, который бы подменял в заголовке тип массива(когда надо)...
Угу, вот: http://www.codeproject.com/KB/dotnet/arrays.aspx . Смутило (и одновременно дало надежду) слово Optional в элементе таблицы SZARRAYS: ElementType(Type).Nord777 писал(а):Что за источник? Ссылка есть?
Private Sub Test()
Dim SB As New System.Text.StringBuilder()
Dim Pointer As IntPtr
Dim obj As Object
Dim Arr() As Byte = New Byte() {&H88, 1, 2, 3, 4, 5, 6, &H99}
obj = Arr
SB.AppendLine("Element Type: " & obj.GetType.GetElementType.FullName)
SB.AppendLine("Arr(0): " & CType(obj, Byte())(0).ToString("X2"))
MsgBox(SB.ToString)
SB.Length = 0
Pointer = Marshal.UnsafeAddrOfPinnedArrayElement(Arr, 0%)
Marshal.WriteInt32(Pointer, -8, &H79332A88)
Marshal.WriteInt32(Pointer, -4, 2)
obj = Arr
SB.AppendLine("Element Type: " & obj.GetType.GetElementType.FullName)
SB.AppendLine("Arr(0): " & CType(obj, Integer())(0).ToString("X8"))
MsgBox(SB.ToString)
End Sub
mov ecx,dword ptr [ebp-24h] писал(а):The runtime has encountered a fatal error. The address of the error was at 0x79e81f7a, on thread 0xd08. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.
В VB.NET проще для таких целей сделать класс, содержащий внутри указатель на блок неуправляемой памяти реализующий интерфейс массивов. В VB6 сие легко реализуется через прямое обращение к SAFEARRAY - даже два кирпича и статья GSerg'а есть на эту тему.MIT писал(а):Да я все еще не могу успокоиться на счет идеи использования двумя массивами одного места в памяти.
The runtime has encountered a fatal error.
Dim SB As New System.Text.StringBuilder()
Dim Pointer As IntPtr
Dim obj As Object
Dim Arr() As Byte = New Byte() {&H88, 1, 2, 3, 4, 5, 6, &H99}
Dim ArrInt(0) As Integer
Pointer = Marshal.UnsafeAddrOfPinnedArrayElement(ArrInt, 0%)
Dim Num As Integer = Marshal.ReadInt32(Pointer, -8)
obj = Arr
SB.AppendLine("Element Type: " & obj.GetType.GetElementType.FullName)
SB.AppendLine("Arr(0): " & CType(obj, Byte())(0).ToString("X2"))
MsgBox(SB.ToString)
SB.Length = 0
Pointer = Marshal.UnsafeAddrOfPinnedArrayElement(Arr, 0%)
Marshal.WriteInt32(Pointer, -8, Num)
Marshal.WriteInt32(Pointer, -4, 2)
'obj = Arr
SB.AppendLine("Element Type: " & obj.GetType.GetElementType.FullName)
SB.AppendLine("Arr(0): " & CType(obj, Integer())(0).ToString("X8"))
MsgBox(SB.ToString)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 64