Localfree on WM2005

M

Mobileboy36

Hello group,

My function BasePing doesn't work any more on mobile 2005.
I get an unsuspected error on the line calling "LOCALFREE". On pocket pc
2003 i still have "normal" behavior.
What am I doing wrong? How can I change my baseping function to get it
working on a WM2005 device?

best regards,
Mobile boy


<System.Runtime.InteropServices.DllImport("coredll")> _
Private Shared Function LocalAlloc(ByVal Flags As Integer, ByVal
size As Integer) As System.IntPtr
End Function

' extern public static IntPtr LocalFree(IntPtr pMem);
<System.Runtime.InteropServices.DllImport("coredll")> _
Private Shared Function LocalFree(ByVal pMem As System.IntPtr) As
System.IntPtr
End Function

<System.Runtime.InteropServices.DllImport("iphlpapi")> _
Private Shared Function IcmpSendEcho( _
ByVal IcmpHandle As System.IntPtr, _
ByVal DestinationAddress As Integer, _
ByVal RequestData As Byte(), _
ByVal RequestSize As Short, _
ByVal RequestOptions As System.IntPtr, _
ByVal ReplyBuffer As Byte(), _
ByVal ReplySize As Integer, _
ByVal Timeout As Integer) As Integer
' returntype zou UInt32 moeten zijn, maar ja geen operators
ondersteunt in Vb.net
End Function


Private Function BasePing(ByVal IpAddress As System.Net.IPAddress, ByVal
TimeOut As Integer, ByVal SendBufferSizeInBytes As Integer) As Integer
' returnwaarden:
'
' -1: Failed to ping, reason other then Request Timed out
' 0: Request Timed out
' > 0: Request Time

Dim Result As Integer = 0
'Dim RequestData As Byte() =
System.Text.Encoding.ASCII.GetBytes(New String("\0", 64))
Dim RequestData As Byte() =
System.Text.Encoding.ASCII.GetBytes(New String(Chr(0), 64))
Dim Reply As ICMP_ECHO_REPLY
Dim pData As System.IntPtr
Dim h As System.IntPtr
Dim intIpaddr As Integer
Dim ret As Integer
Dim dwErr As Integer = 0

'RequestData = System.Text.Encoding.ASCII.GetBytes(New
String("\0", 64))
RequestData = System.Text.Encoding.ASCII.GetBytes(New
String(Chr(0), 64))


'Allocate ICMP_ECHO_REPLY structure
Reply = New ICMP_ECHO_REPLY(255)
Reply.DataSize = 255
pData = LocalAlloc(LMEM_ZEROINIT, Reply.DataSize)
Reply.Data = pData
h = IcmpCreateFile()
intIpaddr = MyIpConvertor(IpAddress)
ret = IcmpSendEcho(h, intIpaddr, RequestData,
System.Convert.ToInt16(RequestData.Length), IntPtr.Zero, Reply._Data,
Reply._Data.Length, TimeOut)

If (ret = 0) Then
dwErr = GetLastError()
If (dwErr <> 11010) Then 'If error is other than timeout -
display a message
Result = -1
'"Failed to ping. Error code: " + dwErr.ToString())
End If
Else
If (dwErr <> 11010) Then ' Then
'String.Format("RTT: {0}, Data Size: {1} TTL: {2}",
Reply.RoundTripTime, Reply.DataSize, Reply.Ttl
Result = Reply.RoundTripTime
Else
'Request timed out
Result = 0
End If
End If
IcmpCloseHandle(h)
LocalFree(Reply.Data)

Return Result
End Function
 
G

Guest

What "unsuspected error" are you getting specifically? My guess is you're
freeing an already-freed buffer.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top