DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: fhc2004
今日帖子: 12
在线用户: 21
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 sefox (OldFox) ★☆☆☆☆ -
盒子活跃会员
2004/2/22 11:50:15
标题:
告诉你我等了很久,我的泪在流。实在没办法,不知怎么挂断 Modem,你知道吗!!!!!!!! 浏览:2042
加入我的收藏
楼主: 告诉你我等了很久,可就是没有答案。
前天找到一篇文件,却在调试中出错。

天那,难到就没有办法。



下面的代码有点儿长,请帮我找出其中的错误。
我在 Delphi 中调试过,总是出现单元文件中 HRASConn 未申报。

我实在没办法了!!!!!!


  unit Unit1; 
  interface
  uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
   StdCtrls, DdeMan; 
  type 
   TForm1 = class(TForm) 
    Button1: TButton; 
    procedure Button1Click(Sender: TObject); 

   private
    { Private declarations } 
     public 
    { Public declarations } 
   end; 

  var 
   Form1: TForm1; 

  implementation 

   uses rasapi; 

  {$R *.DFM} 

  procedure TForm1.Button1Click(Sender: TObject); 
  var 
  bufsize: Cardinal; 
   numEntries: Cardinal; 
  x: Integer; 
   entries: Array[1..10] of TRasConn;//拨号连接数组(假设最多有10个活动的拨号连接) 
  stat: TRasConnStatus; 
  hRas: HRasConn; 
  conexion:pRasConn; 

  begin 

    entries[1].dwSize := SizeOf(TRasConn); 
    bufsize := SizeOf(TRasConn) * 10; 
    FillChar(stat, Sizeof(TRasConnStatus), 0); 
    stat.dwSize := Sizeof(TRasConnStatus); 
    if RasEnumConnections(@entries[1], bufsize, numEntries) = 0 then begin 
     if numEntries > 0 then 
       with entries[1] do begin 
           conexion:=Pointer(rasconn); 
           hRas := Longint(conexion);
          if RasHangUp(hRas) <> 0 then ShowMessage('断开失败'); 
       end 
     else ShowMessage('断开成功'); 
    end; 
   end; 


单元文件
unit RasApi;

interface

Uses WinTypes, WinProcs, Dialogs;

Const
   UNLEN = 256; 
   PWLEN = 256; 
   DNLEN = 15; 
   RAS_MaxEntryName   = 256;//连接名称最大长度 
   RAS_MaxDeviceName   = 128;//设备名称最大长度 
   RAS_MaxDeviceType   = 16;//设备类型名称长度 
   //RAS_MaxParamKey   = 32;
   //RAS_MaxParamValue   = 128;
   RAS_MaxPhoneNumber  = 128;//电话号码的最大长度 
   RAS_MaxCallbackNumber = RAS_MaxPhoneNumber; 

Type
   {UINT = Word;} 
   PHRASConn = ^HRASConn; 

   Type
   { 确认一活动的拨号连接. (为RasConnectEnum函数使用) } 
   PRASConn = ^TRASConn;//拨号连接的句柄类型 
   TRASConn = record 
   dwSize: DWORD;//该结构类型所占内存的字节大小 
   rasConn: HRASConn;//活动连接的句柄 
   szEntryName: Array[0..RAS_MaxEntryName] Of Char;//
   szDeviceType : Array[0..RAS_MaxDeviceType] Of Char; 
   szDeviceName : Array [0..RAS_MaxDeviceName] of char; 
   end;

   PRASConnStatus = ^TRASConnStatus; 
   TRASConnStatus = Record 
   dwSize: LongInt; 
   rasConnstate: Word; 
   dwError: LongInt; 
   szDeviceType: Array[0..RAS_MaxDeviceType] Of Char;
   szDeviceName: Array[0..RAS_MaxDeviceName] Of Char;
   End;

   PRASDIALEXTENSIon_S= ^TRASDIALEXTENSIONS; 
   TRASDIALEXTENSIon_S= Record
   dwSize: DWORD;
   dwfOptions: DWORD; 
   hwndParent: HWnd; 
   reserved: DWORD; 
   end; 

   PRASDialParams = ^TRASDialParams; 
   TRASDialParams = Record 
   dwSize: DWORD; 
   szEntryName: Array[0..RAS_MaxEntryName] Of Char; 
   szPhoneNumber: Array[0..RAS_MaxPhoneNumber] Of Char; 
   szCallbackNumber: Array[0..RAS_MaxCallbackNumber] Of Char; 
   szUserName: Array[0..UNLEN] Of Char; 
   szPassword: Array[0..PWLEN] Of Char; 
   szDomain: Array[0..DNLEN] Of Char; 
   end; 

   PRASEntryName = ^TRASEntryName; 
   TRASEntryName = Record 
   dwSize: LongInt; 
   szEntryName: Array[0..RAS_MaxEntryName] Of Char; 
   {Reserved: Byte;}
   End;

   //拨号函数

Function RasDial(
   lpRasDialExtensions : PRASDIALEXTENSIONS ; //在WIN9X下无用,可设置为NIL
   lpszPhonebook: PChar; //在WIN9X下无用,可设置为NIL
   lpRasDialParams : PRASDIALPARAMS; // 拨号参数,类型指针
   dwNotifierType : DWORD;   { 消息通知方式}
   lpvNotifier: DWORD;  { 消息处理事件}
   var rasConn: HRASConn   { 返回成功连接的连接句柄}
   ): DWORD; stdcall;

Function RasEnumConnections(RASConn: PrasConn;
   var BufSize: DWord;
   var Connections: DWord): LongInt; stdcall;

Function RasEnumEntries (
   reserved: PChar;  {保留字段,必须为空}
   lpszPhonebook: PChar ;  { 电话本名称,在WIN9X下无用,可设置为NIL}
   lprasentryname: PRASENTRYNAME ; {接收拨号连接名称的缓冲区,是一类型数组的指针}
   var lpcb :   DWORD; {接收拨号连接名称的缓冲区的大小}
   var lpcEntries : DWORD  {实际获得拨号连接 的数目}
   ) : DWORD; stdcall;

Function RasGetConnectStatus(RASConn: hrasConn;  { 指定活动连接的句柄 }
   RASConnStatus: PRASConnStatus { 获取活动连接状态信息的缓冲区}
   ): LongInt; stdcall;

Function RasGetErrorString(ErrorCode: DWord;  { 错误代码标识}
   szErrorString: PChar;  { 错误提示信息的缓冲区}
   BufSize: DWord   {错误提示信息的缓冲区的大小 }
   ): LongInt; stdcall;

Function RasHangUp(RASConn: hrasConn ): LongInt; stdcall;

Function RasGetEntryDialParams(
   lpszPhonebook:PChar;  {电话本名称,在WIN9X下无用,可设置为NIL }
   VAR lprasdialparams:TRASDIALPARAMS; {拨号参数,是一类型指针}
   VAR lpfPassword : BOOL  {显示是否需要用户密码}
   ): DWORD; stdcall;

implementation

const
   RAS_DLL = 'RASAPI32';

Function RasDial; external RAS_DLL name 'RasDialA';
Function RasEnumConnections; external RAS_DLL name 'RasEnumConnectionsA';
Function RasEnumEntries; external RAS_DLL name 'RasEnumEntriesA';
Function RasGetConnectStatus; external RAS_DLL name 'RasGetConnectStatusA';
Function RasGetErrorString; external RAS_DLL name 'RasGetErrorStringA';
Function RasHangUp; external RAS_DLL name 'RasHangUpA';
Function RasGetEntryDialParams; external RAS_DLL name 'RasGetEntryDialParamsA';
end.

----------------------------------------------
给口饭吃吧,各位......
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS