|
分類:[VB.NET/VB2005]
2008/01/30(Wed) 18:54:33 編集(投稿者) 2008/01/30(Wed) 18:40:10 編集(投稿者)
<pre><pre>いつもありがとうございます。 VB6.0からVB.NETに変換したのですが、RtlMoveMemoryの部分でうまくいきませんでした。 調べてみると、型指定なしのAnyが理由というところまではわかりましたので、型を明示するように変更しました。 (やりたいのは、dibをグローバルロックしてグローバルハンドルを取って、BMPファイルに出力)
VB6.0------------------------------------------------- Public Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long) Dim bmf As BITMAPFILEHEADER Dim bmi As BITMAPINFOHEADER Dim handle As Long handle = GlobalLock(dib) 'BITMAPINFOHEADERの取得 RtlMoveMemory bmi, ByVal handle, Len(bmi) ------------------------------------------------- ↓ 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)) -------------------------------------------------
このような変更でよいのでしょうか? また、上記の変更でこの部分はうまくいくようになったのですが、同じことを他の部分にやろうとすると、エラーが起こります。 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' がないため、オーバーロードの解決に失敗しました:
1行目2行目と、3行目の区別ができないためですよね? 何か良い対策はあるのでしょうか? </pre></pre>
|