在VFP中调用API实现拨号上网

使用拨号API 可以在共享项目中的 Xamarin.Essentials 中调用拨号程序系统。 using Xamarin.Essentials; private async void OnCall(object sender,EventArgs e) { var result = await DisplayAlert("Dial a Number", $"Would you like to ca 阅读详情
  在Visual FoxPro 中实现拨号上网功能,难点在于如何调用相应的WINDOWS API函数。与拨号网络相关的几个API函数需要复杂的结构类型的参数,在VFP帮助文件“程序员指南—访问API”中有相关说明,但较为简单,不足以解决问题,在此作进一步探讨。希望通过本文能解决实现拨号上网的实际问题,更希望通过这个例子帮助了解如何在VFP环境下调用参数复杂的API函数,以扩展VFP的应用。

  因篇幅所限,本文仅论述关键部分,相关细节说明请参阅参考文件。

  WINDOWS API中RasDial函数可实现拨号上网功能,可在MSDN帮助中查到,其参数简述如下:

DWORD RasDial( // 返回四字节整数,对应VFP的INTEGER型变量
 LPRASDIALEXTENSIONS lpRasDialExtensions, // 指针,置NULL即可
 LPCTSTR lpszPhonebook, // 指针,置NULL即可
 LPRASDIALPARAMS lpRasDialParams,
 // 指针,指向参数结构变量RASDIALPARAMS
 DWORD dwNotifierType, // 四字节整数,置0即可
 LPVOID lpvNotifier, // 指针,置NULL即可
 LPHRASCONN lphRasConn // 指针,指向远程访问连接句柄HRASCONN。
 // 调用RasDial前需先置HRASCONN为NULL
);

  其中结构RASDIALPARAMS描述如下:

typedef struct _RASDIALPARAMS {
 DWORD dwSize; // 4字节,值为本结构占用总字节数
 // 调用此函数前必须给此变量赋值
 TCHAR szEntryName[RAS_MaxEntryName + 1];
 // 257字节,拨号网络电话簿中连接名,
 // 为空则在第一个MODEM端口上,用下述电话号码、用户名、密码建立连接
 TCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; // 129字节,电话号码
 TCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1];
 // 129字节,回叫号码,置空
 TCHAR szUserName[UNLEN + 1]; // 257字节,用户名
 TCHAR szPassword[PWLEN + 1]; // 257字节,密码
 TCHAR szDomain[DNLEN + 1] ; // 16字节,域名,置空
 #if (WINVER >= 0x401) // 缺省情况下,WINVER=Ox400,无以下两项
  DWORD dwSubEntry;
  DWORD dwCallbackId;
 #endif
} RASDIALPARAMS;

  以上RAS_MaxEntryName等预定义值,可从RAS.H与LMCONS.H中查出。难点在于dwSize值的确定:将结构中各变量字节长度累加应为1049字节,但将1049代入dwSize去调用RasDial函数却返回错误。启动VC++6.0定义了一个RASDIALPARAMS型结构变量后,发现其长度为1052字节,即最接近1049且能被4(DWORD所占字节数)整除的值。
  分析至此,函数RasDial的各项参数已清楚,VFP中调用程序如下:

  *!* 先注册函数

DECLARE INTEGER RasDial in rasapi32 ;
INTEGER , ; && lpRasDialExtensions
INTEGER , ; && lpszPhonebook
STRING @ , ; && 指向RasDialParams
INTEGER , ; && dwNotifierType
INTEGER , ; && lpvNotifier
INTEGER @ && 指向hRasConn
*!* 给结构变量RasDialParams中各变量赋初值
dwSize= CHR(28)+ CHR(4)+ CHR(0)+ CHR(0) && 即4*256+28=1052
szEntryName=REPLICATE(CHR(0), 257) && 不使用电话簿
sTemp="95963" && 服务器(INTERNET服务商或自建)的电话号码
TszPhoneNumber = sTemp +REPLICATE(CHR(0),129-LEN(sTemp)) && 补足129字节
szCallbackNumber=REPLICATE(CHR(0), 129) && 回拨号码,置空
sTemp="263" && 用户名
szUserName = sTemp +REPLICATE(CHR(0),257-LEN(sTemp)) && 补足字节数
sTemp="263" && 密码
szPassword = sTemp +REPLICATE(CHR(0),257-LEN(sTemp)) && 补足字节数
szDomain=REPLICATE(CHR(0), 16) && 如为自建服务器,可填入相应域名
*!* 生成结构变量RasDialParams初值
RasDialParams=dwSize+szEntryName+TszPhoneNumber+szCallbackNumber ;
+szUserName+szPassword+szDomain +REPLICATE(CHR(0), 3)
hRasConn=0 && 远程访问连接句柄,初值为0
DialResult=RasDial(0,0, @RasDialParams,0,0,@hRasConn)

  断线的程序如下:

DECLARE INTEGER RasHangUp in rasapi32 INTEGER
HangResult=RasHangUp(hRasConn)

  注意以下几点:

  * 指针参数(p或lp开头)通常按引用传递。NULL指针为特殊情况,其值为0,在VFP中对应值为0的INTEGER类型变量。句柄参数(H开头)对应INTERGER变量。

  * API函数中空字符的ASCII码为0,即CHR(0)。

  本文中的程序在Visual FoxPro 6.0下编译通过,在WINDOWS98、WINDOWS2000下运行成功。
VB中注销, 重启和关闭计算机 VB中注销, 重启和关闭计算机 VB中注销, 重启和关闭计算机VB中注销, 重启和关闭计算机VB中注销, 重启和关闭计算机VB中注销, 重启和关闭计算机 立即下载

相关推荐

使用Windows API:RAS拨号

使用Windows API 中RAS 实现拨号

VFP调用API来控件USB摄像头,实现拍照或录像。

*--前提:VFP7.0以上;Windows 2K及以上*--定义:一般放到主程序或表单(集)的Load事件中Public WM_CAP_DRIVER_DISCONNECTPublic hwndc,WM_CAP_SAVEDIB,WM_CAP_FILE_SET_CAPTURE_FILEA,WM_CAP_SEQUENCE,WM_CAP_STOPDeclare Integer capCreateC

apple_8180(十豆三) 的专栏 1万+

VFP调用网页

VFP读取新浪网页,猜大小.猜中率经常在50%以上,希望有统计学方面专长的人一起研究

VC下利用windows API进行modem拨号

windows API modem 拨号

catman70246的专栏 1626

如何编译RustDesk(Unbuntu 和Android版本)

备注:官方文档上,一边都是基于sciter,这个在后面已经不建议使用了,但是依然可以编译刚开始的时候看官方的文档,涉及的东西比较多,也搞的一头雾水,通过B站上一个视频,可以通过CI/CD来编译,以及act本地试试(最终放弃,大概需要下载大几十G的容器下来)。最终总算明确了方向,可以用自动化流水线来编译。直接看CI/CD的脚本文件文件在.github/workflows目录下,重点研究 bridge.yml 和flutter-build.yml 这两个文件。

lvronglee的专栏 2547

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5731

利用API可以直接拨号

PrivateDeclareFunctiontapiRequestMakeCallLib"TAPI32.DLL"  (ByValDestAddr$,ByValAppNameAsString,  ByValCalledPartyAsString,ByValCommentAsString)AsLong 例子: PublicSubCallPhone(NumberAsString,NameAsStri...

Windows SDK 1070

声音事件检测metric:PSDS

这项工作为多声道声音事件检测(SED)系统的性能评估定义了一个新的框架,它克服了传统的collar-based事件决定、事件F-cores和事件错误率的限制。拟议的框架引入了对事件检测的定义,该定义对标签的主观性更为稳健。它还采用了多声道接收器操作特性(ROC)曲线,以提供比F1分数更全面的系统性能洞察力,并建议将这些曲线简化为单一的多声道声音检测分数(PSDS),这允许系统独立于操作点(OPs)进行比较。所提出的方法还能更好地了解不同声音类别的数据偏差和分类稳定性。

Maestro_T的博客 2728

用Ras的API函数创建一个拨号连接

很久以前我们的项目中曾提到过一个需求,因为拨号连接的设置过于繁琐,希望能够在我们的程序中提供输入几个必要的参数,然后自动生成一个拨号连接。当时我对于RAS也是刚刚接触(其实到现在也只是刚刚入了点门),通过查阅资料知道RasSetEntryProperties加上RasSetEntryDialParams可以实现(如果不清楚的,可以查阅MSDN,里面解释的比较清楚),但是这种方法貌似设置不了mode...

tempsitegoogle 493

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1555

Matlab之fdesign的应用说明

fdesign 是 MATLAB 中用于数字滤波器设计的工具(属于),它提供了一种系统化的方式来定义滤波器参数并生成相应的滤波器。指定滤波器的频率、幅度等参数。例如,设计一个低通滤波器:Fs = 1000;% 采样率 (Hz)% 通带截止频率% 阻带截止频率Apass = 1;% 通带衰减 (dB)Astop = 60;% 阻带衰减 (dB)

嵌入式老牛的博客 1052

关于vfp声明api函数的小发现

前不久偶然看到了 dkfdtf 版主N久前发的一个贴子,这里做了在没有动摇根本的情况下做了少许修改并加以说明 测试环境 Win xp sp3 + vfp 9.0 sp2 7423 + 1G内存 + 闪龙 3000+ CPU 1.先看测试代码 CLEAR CLEAR DLLS m.nStart = SECONDS() FOR m.ii = 1 TO 5000 Declare l

taohua300的专栏 1650

从编解码芯片看Tesla T4的隐藏实力:双NVDEC如何实现70路1080P解码?

本文深入剖析了英伟达Tesla T4显卡的隐藏实力,重点解读其独特的双NVDEC硬件解码器设计如何突破性能瓶颈。通过分析Turing架构、对比HEVC/H.264解码差异,并结合驱动与SDK优化,揭示了实现高达70路1080P视频流并发解码的原理与实战配置,为云游戏、直播转码等高并发场景提供高效解决方案。

weixin_29209801的博客 485

请问VFP的数据库能够通过网络远程操控吗?

我想编一个管理系统,系统中两个用户分别在不同的地方,但他们使用的是同一个数据库,请问VFP的数据库支持远程操控吗?在VFP"向导"中的"升迁"是怎么回事,如何使用.如果上述方案不行,请问有什么其他方案VFP与SQL SERVER到底是什么关系,用ODBC建立连接之后,VFP就可以远程操控数据库了吗?是不是意思就是要用SQL SERVER把数据库建立在服务器上,然后用VFP编写用户程序,在客

ninihappa的专栏 1566

【WRF-Urban】URBPARM_LCZ.TBL 查找表解释及内容

URBPARM_LCZ.TBL 查找表解释及内容

WW、forever的博客 1754

光学相干断层扫描(OCT)在 妇科诊断 中的革命性应用

尽管OCT在妇科的应用提供了许多潜在的优势,但它仍然是一个相对新的技术,并不是所有医疗机构都有能力提供这种类型的成像服务。随着技术的发展和医生对OCT的熟悉程度的提高,预计OCT将在妇科和其他医学领域中扮演越来越重要的角色。早期发现和准确的分类是提高治疗成功率的关键。虽然这是一个相对较新的应用领域,但OCT的非侵入性和高分辨率成像能力可能提供有价值的信息,以提高辅助生殖技术的成功率。:光学相干断层扫描(OCT)在阴道和外阴组织的评估中的应用正在逐渐展开,提供了一种新的方法来诊断和监测各种妇科疾病。

LiRongLu_的博客 1720

VFP实现网络校时

 VFP实现网络校时 *客户机与校时服务器日期相同时可以校对时间,日期有差异时校时会失败  =Strtofile("@net Time /setsntp:210.72.145.44"+Chr(13)+Chr(10)+"@net stop w32time"+Chr(13)+Chr(10)+"@net start w32time"+Chr(13)+Chr(10)+"@w32tm /resync /re

apple_8180(十豆三) 的专栏 6376

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 让注册表记住VFP应用程序的使用次数
下一篇: 利用VFP在INTERNET上制作数据库动态查询
vin2000
博客等级 码龄22年 22粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值