在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

3款主流AIGC模型部署方案对比:本地、云端与混合架构的成本与性能分析

本文对比分析了3种主流AIGC模型部署方案(本地、云端与混合架构)的成本与性能差异,帮助企业在预算、性能和维护复杂度之间找到最佳平衡点。通过实际案例和详细数据,展示了不同部署方式在延迟、扩展性、数据隐私等方面的优劣势,为技术决策者提供实用参考。

weixin_33158887的博客 370

SAP 资产主数据屏幕增强:对比字段追加与子屏幕/页签 2 种方案优劣

本文深入对比了SAP资产主数据(AS01/AS03)屏幕增强的两种方案:字段追加与子屏幕/页签。从技术实现、业务适配、系统维护等维度分析各自优劣,提供方案选型决策树和混合方案实践建议,帮助企业在SAP实施中做出最优选择。

weixin_28559803的博客 284

利用API可以直接拨号

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

Windows SDK 1070

ThinkBook 16 2024 Ubuntu驱动全攻略:从无线网卡到触控板

本文详细介绍了ThinkBook 16 2024在Ubuntu系统下的驱动问题解决方案,涵盖无线网卡、蓝牙、显卡和触控板等关键硬件的驱动修复步骤。通过具体命令和配置指南,帮助用户快速解决兼容性问题,提升Ubuntu在ThinkBook上的使用体验。

weixin_29200741的博客 826

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

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

tempsitegoogle 493

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 476

【CAN总线测试】——使用VH6501 进行Busoff快慢恢复测试

即在IDBase中填标准帧11位二进制ID,如果不满11位,高位补零,凑齐11位,并将下方CurrTriggerField设置干扰前一位AckSlot位,Triggeroffset设置为0。首先确认环境支持VN6501,6501硬件连接成功后,工程的小闪电是正常黄色状态,若是灰色证明缺少License,或者软件安装环境不正确。填写干扰报文ID、干扰位置 注意这里的干扰位置是实际干扰的前一位,TriggerOffset表示偏移量,可以干扰某个字节的具体位.找到并打开Panel后,开启工程,并且配置面板。

LOVE135149的博客 5629

关于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

基于STM32、HAL库、I2C接口的姿态传感器/陀螺仪之ICM-42670-P驱动 C语言程序设计

/ 设置加速度计和陀螺仪的工作模式。// 读取加速度计和陀螺仪数据。

corlin6688的博客 1180

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

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

ninihappa的专栏 1566

Qt/C++音视频开发1-vlc解码播放

一、前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+vlc来做播放器,提供的接口还是非常友好的,而且门类特别多,想要获取媒体文件的各种信息比如宽高,设置宽高比等,直接调用接口函数传入参数就能设置。 所有用vlc做视频监控解码的人都会遇到一个问题,那就是鼠标事件被接管拦截了,不能识别鼠标事件,比如双击最大化等,这就很憋屈了,明明很好用的一个东西,怎么突然之间鼠标事件

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 4938

​非线性分析-增加位移量可能出现下面错误。虽然求解无法在所有时间点完成,但在某些点上仍能够求解部分结果。请参阅“帮助系统”中的故障排除,以了解更多信息详情。由于受约束,规划求解引擎无法收敛

基于收敛状态拆分载荷步‌:在已收敛的载荷步基础上,将未收敛的关键区域拆分为更细的子步,比如在载荷突变点前设置5~10个子步,逐步加载。替换冲突约束为弱约束‌:若存在约束冲突,将刚性约束替换为弱弹簧约束(刚度设为1e-6~1e-4),既限制刚体位移,又不影响结构的变形自由度,命令流:SPRING, NODE, K, 1e-6。部分区域约束完整,但存在未被约束的刚体自由度,或约束类型与大变形/接触逻辑冲突,比如某部件的位移约束在初始阶段有效,但大变形后约束位置脱离实际受力点,导致求解器在该阶段无法收敛。

qq_15963745的博客 144

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值