| > VB.NET------------------------------------------------- > Public Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As BITMAPINFOHEADER, ByVal Source As IntPtr, ByVal Length As Integer) > > Dim bmf As BITMAPFILEHEADER > Dim bmi As BITMAPINFOHEADER > Dim handle_Renamed As Long > > handle_Renamed = GlobalLock(dib) > > 'BITMAPINFOHEADERの取得 > RtlMoveMemory(bmi, handle_Renamed, Len(bmi)) > ------------------------------------------------- > > このような変更でよいのでしょうか?
Dim handle_Renamed As Long がまずいと思います。ポインタを扱うならAs LongではなくAs IntPtrを使いましょう。 (それにあわせてGlobalLockのDeclareも修正がたぶん必要になるでしょう)
ちなみにVB6のLongは32bit、.NETのLongは64bitです。
> また、上記の変更でこの部分はうまくいくようになったのですが、同じことを他の部分にやろうとすると、エラーが起こります。 > Public Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As Byte, ByRef Source As Integer, ByVal Length As Integer) > Public Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As Byte, ByRef Source As Short, ByVal Length As Integer) > Public Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As Byte, ByVal Source As IntPtr, ByVal Length As Integer) > > error BC30203: 識別子が必要です。 > error BC30519: 縮小変換しないで呼び出される、アクセス可能な 'RtlMoveMemory' がないため、オーバーロードの解決に失敗しました:
先の提示コードと同じような形であればhandle_RenamedがLong型だから、 ぴったりのオーバーロードが見つからないためでしょう。
|