Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.069 c
6-1101200124
-= Demon =-
2004-11-23 11:55
2005.02.06
WSock32.dll


1-1106143457
Vera
2005-01-19 17:04
2005.02.06
Фиксированная форма


4-1103123827
-=SS=-
2004-12-15 18:17
2005.02.06
Можно ли по ID просесса узнать хендл окна этого просесса ?


10-1082362359
7th_Angel
2004-04-19 12:12
2005.02.06
Диаграммы в Excel


1-1106572103
Wolffgang
2005-01-24 16:08
2005.02.06
circular unit reference