dポイントプレゼントキャンペーン実施中!

WEBで見つけたVB6のサンプルコードをVB.NET用に書き直して
いるのですが、なんとか波線のエラーはなくなったものの
実行すると、思った結果が得られません。
正しい訂正方法を教えて頂きたいです。

サンプルコードは下記のサイトにありました。
http://vbnet.mvps.org/index.html?code/internet/f …
インターネットキャッシュに関するものです。
文字数の関係で全部は書けないのですが、現在は↓のようになっています。
その他の訂正箇所は
全部のAs Any を As Objectに変更していて、
ComboBoxのアイテムに数値が設定できないようなので、
Select Caseで判断するようにしています。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim numEntries As Long
Dim cacheType As Long

Select Case ComboBox1.SelectedIndex
Case Is = 0
cacheType = &H1S
Case Is = 1
cacheType = &H8S
Case Is = 2
cacheType = &H10S
Case Is = 3
cacheType = &H20S
Case Is = 4
cacheType = &H40S
Case Is = 5
cacheType = &H10000
Case Is = 6
cacheType = &H100000
Case Is = 7
cacheType = &H200000
Case Is = 8
cacheType = URLCACHE_FIND_DEFAULT_FILTER
End Select

Label1.Text = "Working ..."
Label1.Refresh()
ListBox1.Items.Clear()
ListBox1.Visible = False
numEntries = GetCacheURLList(cacheType)
ListBox1.Visible = True
Label1.Text = VB6.Format(numEntries, "###,###,###,##0") & "files found"
End Sub

Private Function GetCacheURLList(ByRef cacheType As Long) As Long
Dim ICEI As INTERNET_CACHE_ENTRY_INFO
Dim hFile As Long
Dim cachefile As String
Dim nCount As Long
Dim dwBuffer As Long
Dim pntrICE As Long

dwBuffer = 0

hFile = FindFirstUrlCacheEntry(vbNullString, 0, dwBuffer)
If (hFile = ERROR_CACHE_FIND_FAIL) And (Err.LastDllError = ERROR_INSUFFICIENT_BUFFER) Then
pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)

If pntrICE Then

CopyMemory(pntrICE, dwBuffer, 4)
hFile = FindFirstUrlCacheEntry(vbNullString, pntrICE, dwBuffer)

If hFile <> ERROR_CACHE_FIND_FAIL Then

Do
CopyMemory(ICEI, pntrICE, Len(ICEI))
If (ICEI.CacheEntryType And cacheType) Then
cachefile = GetStrFromPtrA(ICEI.lpszSourceUrlName)
ListBox1.Items.Add(cachefile)
nCount = nCount + 1

End If
Call LocalFree(pntrICE)
dwBuffer = 0
Call FindNextUrlCacheEntry(hFile, 0, dwBuffer)
pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)
CopyMemory(pntrICE, dwBuffer, 4)
Loop While FindNextUrlCacheEntry(hFile, pntrICE, dwBuffer)
End If
End If
End If
Call LocalFree(pntrICE)
Call FindCloseUrlCache(hFile)

GetCacheURLList = nCount
End Function

どうしてもここから分からないので、お助けいただきたいです。
よろしくお願いいたします。

A 回答 (2件)

> ツールの中にあるVB6を自動で変換するという機能を使って


> 変換した際にLongが全部Integerになっていたので、
> 全部Longに戻してしまってあります。

つまり、
「APIを使用するとき、型を変更しないとかなりの確率で誤動作」するので、
親切にも直してくれた(LongをIntegerにしてくれた)のに、
貴方は、それを無効にしたって事です。

Integerにしてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
全部Integerに直しました。
変数の数値が変わって別のエラーが出たのでそれを調べて見たいと思います。
ありがとうございました。

お礼日時:2008/02/14 15:25

> その他の訂正箇所は


> 全部のAs Any を As Objectに変更していて、
他はやっていないのでしょうか?

例えば、Long型からInteger型への修正とか・・・

#VB6のLong型は32ビット、Integer型は16ビットでしたが、
#VB.NETでは、Long型は64ビット、Integer型は32ビットなので、
#APIを使用するとき、型を変更しないとかなりの確率で誤動作しますけど・・・

この回答への補足

ご回答ありがとうございます。
ツールの中にあるVB6を自動で変換するという機能を使って
変換した際にLongが全部Integerになっていたので、
全部Longに戻してしまってあります。
現在は↓のようになっているので、ご覧頂けると幸いです。

http://www.geocities.jp/popopompom_oshiete_goo/i …

補足日時:2008/02/14 14:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!