Текущий архив: 2005.02.06;
Скачать: CL | DM;
Вниз
Как отловить WM_RASDIALEVENT? Найти похожие ветки
← →
Separator © (2005-01-25 15:57) [0]
const
WM_RASDIALEVENT = $CCCD;
TfrmMain = class(TForm)
private
procedure RasDialFunc(var Message: TMessage); message WM_RASDIALEVENT;
Ругается так: Illegal message method index
← →
begin...end © (2005-01-25 16:04) [1]> Separator © (25.01.05 15:57)
Из справки (Message methods):
A message method is created by including the message directive in a method declaration, followed by an integer constant between 1 and 49151 which specifies the message ID.
← →
Separator © (2005-01-25 16:10) [2]Это я понял, но как мне тогда быть?
← →
begin...end © (2005-01-25 16:11) [3]> [2] Separator © (25.01.05 16:10)
Уменьшить константу WM_RASDIALEVENT.
← →
Separator © (2005-01-25 16:27) [4]Но не я ведь её придумал. Я вообще использую модуль RAS, мне вызвать дозвон. Для этого я пишу так:
function TfrmMain.Dial;
var
Err: Longint;
RDParams: TRasDialParams;
begin
Result:= false;
RDParams.dwSize:= SizeOf(TRasDialParams);
StringToArray(Name, RDParams.szEntryName);
StringToArray(IntToStr(edNumber.AsInteger), RDParams.szPhoneNumber);
StringToArray("", RDParams.szCallbackNumber);
StringToArray(edUser.Text, RDParams.szUserName);
StringToArray(edPswd.Text, RDParams.szPassword);
StringToArray("", RDParams.szDomain);
Err:= RasDial(nil, nil, RDParams, 0, @RasDialFuncF, fHRasConn);
if Err = SUCCESS then Result:= true
end;
функция RasDial имеет такой код:
function RasDial(
lpRasDialExt: LPRasDialExtensions;
lpszPhoneBook: PChar;
var params: TRasDialParams;
dwNotifierType: Longword;
lpNotifier: Pointer;
var rasconn: THRasConn
): Longint;
begin
if bRasAvail and (@_RasDialA <> nil) then
Result := _RasDialA(lpRasDialExt, lpszPhoneBook, params, dwNotifierType,
lpNotifier, rasconn)
else
Result := -1;
end;
В качестве параметра lpNotifier можно передать ссылку на процедуру, такого типа:
void CALLBACK RasDialFunc(
UINT unMSG,
RASCONNSTATE rasconnstate,
DWORD dwError
);
RASCONNSTATE это просто Integer. Описываю функцию так:
function RasDialFuncF(const unMsg: UINT; const RasConnState: TRasConnState; const dwError: DWORD): Longint;
При запуске у меня вываливется окошко CPU с ошибкой Access Violation.
Что я делаю не правильно?
← →
Jel © (2005-01-25 17:30) [5]RasDialFuncF объяви как stdcall. Это правило касается любых callback-ов вызываемых из API.
← →
Digitman © (2005-01-26 09:16) [6]
> Separator © (25.01.05 16:27) [4]
> Но не я ведь её придумал
понятно что не ты ..
но справку-то читать нужно внимательно, согласен ?
вот ты пишешь
RasDial(..., 0, @RasDialFuncF, ..);
раз этот параметр (dwNotifierType) равен нулю, значит при наступлении RAS-события будет вызываться callback-функция, адрес которой ты передал (@RasDialFuncF), т.е. никакие procedure RasDialFunc(var Message: TMessage); message WM_RASDIALEVENT; тебе вовсе не нужны
Страницы: 1 вся ветка
Текущий архив: 2005.02.06;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.043 c