.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
66 件の質問
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
dim a1() as byte={0} として、a1(0)のアドレスを4096の倍数に設定したいです。
このような機能は、.Net Frameworkにありますか。
質問は、以上です。
よろしくお願い致します。
VBにそのような機能はありません
Sub Main()
Dim a1() As Byte
Using temp As System.IDisposable = _aligned_malloc(a1, 0, 4096)
Console.WriteLine(temp)
End Using
End Sub
Private Function _aligned_malloc(ByRef a1 As Byte(), size As Integer, alignment As Integer) As IDisposable
Do While True
a1 = New Byte(size) {}
Dim h = System.Runtime.InteropServices.GCHandle.Alloc(a1, System.Runtime.InteropServices.GCHandleType.Pinned)
Dim p = h.AddrOfPinnedObject()
If (p.ToInt64() Mod alignment) = 0 Then
Return New Temp(h, p)
Else
h.Free()
End If
Loop
End Function
Class Temp
Implements System.IDisposable
Public Sub New(h As GCHandle, p As IntPtr)
Me.h = h
Me.p = p
End Sub
Private h As System.Runtime.InteropServices.GCHandle
Private p As IntPtr
Public Sub Dispose() Implements IDisposable.Dispose
Me.h.Free()
End Sub
Public Overrides Function ToString() As String
Return p.ToString("X")
End Function
End Class