Einzelnen Beitrag anzeigen

FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#43

AW: Wie kann ein Zeiger auf eine Funktion als Paramater übergeben werden?

  Alt 7. Dez 2010, 09:43
Wenn sich die Callback-Prozedur nicht innerhalb der Klasse befindet, funktioniert deren Aufruf aus der Klasse heraus problemlos.
Delphi-Quellcode:
[...schnipp...]

AdsResult := AdsResult + AdsSyncAddDeviceNotificationReq( @LocalAddr,
                                                          ADSIGRP_SYM_VALBYHND,
                                                          varHandle,
                                                          @adsNotificationAttrib,
                                                          @NotificationCallback, //hier wird auf die Adresse der Callback-Prozedur verwiesen
                                                          Handle,
                                                          @hNotification );

[...schnipp...]
Nur kann ich dann nicht innerhalb der Callback-Prozedur auf das Feld/Attribut MessageID zugreifen.
Delphi-Quellcode:
[...schnipp...]

Procedure NotificationCallback( pAddr:PAmsAddr;
                                pNotification:PAdsNotificationHeader;
                                hUser:Longword ); stdcall;
begin
    PostMessage(HWND(hUser), TMeineKlasse.MessageID , 0, 0); //Compiler findet Feld/Attribut "TMeineKlasse.MessageID" nicht
end;
Wenn der Quellcode aber so geändert wird, dass die Callback-Prozedur Teil der Klasse wird, dann ist zwar der Zugriff auf das Feld/Attribut MessageID problemlos möglich
Delphi-Quellcode:
Procedure TMeineKlasse.NotificationCallback( pAddr:PAmsAddr;
                                pNotification:PAdsNotificationHeader;
                                hUser:Longword ); stdcall;
begin
    PostMessage(HWND(hUser), MessageID, 0, 0); //Compiler findet Feld/Attribut "MessageID"
end;

[...schnipp...]

AdsResult := AdsResult + AdsSyncAddDeviceNotificationReq( @LocalAddr,
                                                          ADSIGRP_SYM_VALBYHND,
                                                          varHandle,
                                                          @adsNotificationAttrib,
                                                          @NotificationCallback, //hier wird auf die Adresse der Callback-Prozedur verwiesen
                                                          Handle,
                                                          @hNotification );

[...schnipp...]
aber der Compiler bringt die Fehlermeldung "Variable erforderlich" für die Stelle @NotificationCallback, , in der auf die Callback-Prozedur, bzw. jetzt Callback-Methode verwiesen wird.
Hat jemand eine Idee?
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat