Hallo zusammen,
ich habe gerade die Cromis.DirectoryWatch Komponenten nach Unicode und Win64 portiert.
Das Demo-Programm läuft soweit auch zuverlässig, bis ich es beende und die Funktion FreeObjectInstance() aufgerufen wird.
Unter Win64 wird ein Run-time Error 211 ausgelöst - für Win32 gibt es in der Unit Classes eine Implementierung. Die Win64-Version löst aber nur den Run-time Error aus.
Weiß hier jemand Abhilfe?
Ähnlich war es bei der Funktion AllocateHWnd; hier gibt es aber über LCLIntf eine Implementierung des Widgetsets.
FreeObjectInstance unter Win64
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
FreeObjectInstance unter Win64
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: FreeObjectInstance unter Win64
Für alle, die vor dem selben Problem stehen:
Es geht im ganzen um folgende Methode:
Meine Lösung ist jetzt anstatt dieser Methode einfach LCLIntf.DeallocateHWnd aufzurufen.
Es geht im ganzen um folgende Methode:
Code: Alles auswählen
procedure TDirectoryWatch.DeallocateHWnd(Wnd: HWND);
var
Instance: Pointer;
begin
Instance := {%H-}Pointer(GetWindowLongPtr(Wnd, GWL_WNDPROC));
if Instance <> Pointer(@DefWindowProc) then
begin
{ make sure we restore the default
windows procedure before freeing memory }
SetWindowLongPtr(Wnd, GWL_WNDPROC, {%H-}LONG_PTR(@DefWindowProc));
FreeObjectInstance(Instance); // Run-time error 211 auf x86_64
end;
DestroyWindow(Wnd);
end;
Meine Lösung ist jetzt anstatt dieser Methode einfach LCLIntf.DeallocateHWnd aufzurufen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: FreeObjectInstance unter Win64
Hi!
Die fpc docs ergeben das:
Winni
Die fpc docs ergeben das:
Code: Alles auswählen
211 Call to abstract method
Your program tried to execute an abstract virtual method. Abstract methods should be overridden, and the overriding method should be called.
Winni
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: FreeObjectInstance unter Win64
Hallo Winni,
das ist be folgender Implementierung irgendwie gar nicht verwunderlicht:
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/win64/classes.pp?revision=41168&view=markup#l62
das ist be folgender Implementierung irgendwie gar nicht verwunderlicht:
Code: Alles auswählen
procedure FreeObjectInstance(ObjectInstance: Pointer);
begin
runerror(211);
end;
https://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/rtl/win64/classes.pp?revision=41168&view=markup#l62
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein