用WinInet做的FTP操作,为什么在Windows Mobile下会有问题(急救)

ztx8303 2010-04-07 04:14:15
请路过的同行不吝赐教,万分感谢

下面代码使用的是VB.Net
这个程序在WindowsXP下试了下是可以跑的,相应的get/put的操作也都能成功,
但是在手机模拟器下(VS2005自带的模拟器,选择Windows mobile6)在执行到InternetConnect的时候
返回的句柄是0。我试验的环境下手机模拟器的IE是可以上网的。

Public Class Form1
'首先加载wininet.dll里的函数
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal lAccessType As Int32, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As Integer) As Int32

Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Int32, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Int32, _
ByVal lFlags As Int32, _
ByVal lContext As System.IntPtr) As System.IntPtr

Private Declare Function InternetCloseHandle Lib "WININET.DLL" _
(ByVal HINTERNET As System.IntPtr) As Integer

Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" _
(ByVal hConnect As System.IntPtr, _
ByVal directory As String, _
ByRef bufferLength As Integer) As Boolean

Private Declare Function FtpGetFile Lib "WININET.DLL" Alias "FtpGetFileA" _
(ByVal hConnect As Int32, ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Int32, _
ByVal dwFlags As Int32, ByVal dwContext As Int32) As Int32

Private Declare Function FtpPutFile Lib "WININET.DLL" Alias "FtpPutFileA" _
(ByVal hConnect As Int32, ByVal lpszLocalFile As String, _
ByVal lpszNewRemoteFile As String, _
ByVal dwFlags As Int32, ByVal dwContext As Int32) As Int32


' variable for win32 function
Dim hOpen As Int32
Dim hConnection As System.IntPtr
Dim BoolDir As Boolean
Dim StrDir As String
Dim LenDir As Integer
Dim Reget As Int32
Dim Reput As Int32

‘下面是做FTP操作的程序
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
hOpen = InternetOpen(vbNullString, 1, vbNullString, vbNullString, vbNull)
'hOpen = InternetOpen(vbNullString, 3, vbNullString, "192.168.5.40", vbNull)
If hOpen <> 0 Then
TextBox2.Text = hOpen
hConnection = InternetConnect(hOpen, "192.168.1.100", 21, "temp", "temp,123", 1, 0, 0)
If hConnection <> 0 Then
TextBox3.Text = hConnection
BoolDir = FtpGetCurrentDirectory(hConnection, StrDir, LenDir)
Reget = FtpGetFile(hConnection, "server.xml", "E:\server.xml", False, 128, 1, 0)
Reput = FtpPutFile(hConnection, "E:\IP.txt", "IP.txt", 1, 0)
Else
TextBox1.Text = "Internet Connection error"
TextBox3.Text = hConnection
End If
Else
TextBox1.Text = "Internet Open error"
TextBox2.Text = hOpen
End If

If hConnection <> 0 Then
InternetCloseHandle(hConnection)
End If
If hOpen <> 0 Then
InternetCloseHandle(hOpen)
End If
End Sub

顺便问下怎么取得Windows mobile系统下的手机的文件路径
...全文
158 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztx8303 2010-04-09
  • 打赏
  • 举报
回复
试了“工具->选项->设备工具->设备->属性.”然后改成TCP的方法。用来这个以后再用activesync4.5来同步还是不行,如果不用activesync4.5这个工具的话遇到了"ConmanClient2.exe"找不到的问题,后来根据网上的信息搞了半天也没什么结果。bsr2009兄有什么不用activesync4.5这个工具上网的方法吗,或者给点mobile开发方面完整点的书或资料。
ztx8303 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wang_junjie 的回复:]
试试 InternetOpenUrl
[/Quote]

InternetOpenUrl的格式应该是
InternetOpenUrl(InternetOpen返回的句柄,ftp地址,http的包头,包头长度,flag,context)
这样的话ftp的“ID”和“密码”在哪里输入?
msdn里貌似是有写InternetOpenUrl能操作ftp的“Opens a resource specified by a complete FTP or HTTP URL.”(出自http://msdn.microsoft.com/en-us/library/aa385098(v=VS.85).aspx)

wang_junjie兄能不能给个具体的用InternetOpenUrl操作ftp的流程
bsr2009 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ztx8303 的回复:]

引用 1 楼 bsr2009 的回复:
你用手机能上网的话,应该是DMA模式.
在你的模拟器设备上,将连接改成TCP连接传输看看.
具体:工具->选项->设备工具->设备->属性.


1.我用的确实是DMP模式(详见截图)


2.“将连接改成TCP连接传输”这个是在哪里设置的,我在模拟器配置里(如下图)找不到相应的
工具->选项->设备工具->设备->属性.

1楼的……
[/Quote]
我说的是VS2005下..... 不是模拟器.
ztx8303 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bsr2009 的回复:]
你用手机能上网的话,应该是DMA模式.
在你的模拟器设备上,将连接改成TCP连接传输看看.
具体:工具->选项->设备工具->设备->属性.
[/Quote]

1.我用的确实是DMP模式(详见截图)


2.“将连接改成TCP连接传输”这个是在哪里设置的,我在模拟器配置里(如下图)找不到相应的
工具->选项->设备工具->设备->属性.

1楼的大侠能不能给各截图给我
北方大冬瓜 2010-04-07
  • 打赏
  • 举报
回复
试试 InternetOpenUrl
bsr2009 2010-04-07
  • 打赏
  • 举报
回复
你用手机能上网的话,应该是DMA模式.
在你的模拟器设备上,将连接改成TCP连接传输看看.
具体:工具->选项->设备工具->设备->属性.

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧