难道是这样?
type
TRasDialFunc =^RasDialFunc;
RasDialFunc=record
unMsg:UINT; // type of event that has occurred
rasconnstate:RASCONNSTATE; // connection state about to be entered
dwError:DWORD;
type
TRasDialFunc =^RasDialFunc;
RasDialFunc=record
unMsg:UINT; // type of event that has occurred
rasconnstate:RASCONNSTATE; // connection state about to be entered
dwError:DWORD;
那该怎么付值啊?网上都是这么付值的啊。如果我这么定义
type
TRasDialFunc =^RasDialFunc;
RasDialFunc=record
unMsg:UINT; // type of event that has occurred
rasconnstate:RASCONNSTATE; // connection state about to be entered
dwError:DWORD;
RasDial(nil,nil,@RASDIALPARAMSData,0,nil,@RasCon);
又出现如下错误Types of actual and formal var parameters must be identical
我查网上都是这么付的值啊。
RasDial(nil,nil,@RASDIALPARAMSData,0,nil,@RasCon);第七个参数的指针变量要怎么付值啊???老兄,你有qq吗。想和你交流一下。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Ras,
StdCtrls, ExtCtrls, ComCtrls, Buttons;type
TRASForm = class(TForm)
...
btnDialEntry: TButton;
...
procedure btnDialEntryClick(Sender: TObject);
...
dialparams: TRasDialParams;
....
public
...
end;var
RASForm: TRASForm;implementation
...// Callback RAS function
procedure RasCallback(msg: Integer; state: TRasConnState;
error: Longint); stdcall
begin
if error = 0 then
RASForm.lblStatus.Font.Color := clBlue
else
RASForm.lblStatus.Font.Color := clRed;
RASForm.lblStatus.Caption := StatusString(state, error);
RASForm.btnActiveConn.Click;
end;...procedure TRASForm.btnDialEntryClick(Sender: TObject);
var
r: integer;
c: Array[0..100] of Char;
hRas: THRasConn;
begin
Screen.Cursor := crHourglass;
FillChar(dialparams, SizeOf(TRasDialParams), 0);
with dialparams do
begin
dwSize := Sizeof(TRasDialParams);
StrPCopy(szEntryName, lstEntries.Items[lstEntries.ItemIndex]);
StrPCopy(szUserName, txtUserName.Text);
StrPCopy(szPassword, txtPassword.Text);
// You can override phone number here...
// StrPCopy(szPhoneNumber, 'xxxxxx');
end;
hRas := 0;
if optDialMode.ItemIndex = 0 then
// Sync dial
begin
lblStatus.ParentFont := True;
lblStatus.Caption := 'Dialing...';
lblStatus.Refresh;
r := RasDial(nil, nil, dialparams, 0, nil, hRas);
if r = 0 then
begin
lblStatus.Caption := 'Connected';
btnActiveConn.Click;
end
else
begin
lblStatus.Caption := 'Error';
if hRas <> 0 then
RasHangUp(hRas);
end;
end
else
// Async dial
r := RasDial(nil, // This field is ignored in Windows95
nil, // Phonebook: use default (not used on Win95)
dialparams,
0, // use callback function of type RASDIALFUNC
@RasCallback, // callback function
hRas);
if r <> 0 then
begin
RasGetErrorString(r, c, 100);
ShowMessage('RasDial failed: ' + c);
end;
Screen.Cursor := crDefault;
end;
...
end.
LPRasDialParamsA = ^TRasDialParamsA;
TRasDialParamsA = record
dwSize: LongInt;
szEntryName: Array[0..RAS_MaxEntryName] of AnsiChar;
szPhoneNumber: Array[0..RAS_MaxPhoneNumber] of AnsiChar;
szCallbackNumber: Array[0..RAS_MaxCallbackNumber] of AnsiChar;
szUserName: Array[0..UNLEN] of AnsiChar;
szPassword: Array[0..PWLEN] of AnsiChar;
szDomain: Array[0..DNLEN] of AnsiChar;
{$IFDEF WINVER41}
dwSubEntry: Longint;
dwCallbackId: Longint;
{$ENDIF}
end; LPRasDialParams = ^TRasDialParams;
TRasDialParams = TRasDialParamsA;//RAS中THRasConn定義
LPHRasConn = ^THRasConn;
THRasConn = Longint;
procedure RasDialFunc(unMsg: DWORD; FRasConnState: TRASCONNSTATE; FdwError: DWORD); stdcall;
var
Buf: array[0..255] of Char;
begin
try
ConnState := RasConnectionStateToString(FRasConnState); //连接状态
FormDialUp.Memo1.Lines.Add(TimeToStr(Time) + ':连接状态:' + ConnState);
if FRasConnState = RASCS_Connected then
begin //连接成功
IsConnected := true;
RasDialConEnd := true;
GbdwRedialDialCount := 0;
end
else if FdwError <> 0 then //连接出错
begin
RasGetErrorStringa(FdwError, @Buf[0], SizeOf(Buf));
RasError := (Buf);
FormDialUp.Memo1.Lines.Add(TimeToStr(Time) + ':连接状态:' + RasError);
Disconnected;
IsConnected := false;
RasDialConEnd := true;
end;
except
end;end;