Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit Typ-Inkompatibilität (https://www.delphipraxis.net/187985-problem-mit-typ-inkompatibilitaet.html)

PeterPanino 21. Jan 2016 10:56

Problem mit Typ-Inkompatibilität
 
Hallo!

Ich habe diesen Source Code auf Torry gefunden: Professional Screen Camera Component v.5.2.3.0. Die enthaltene kompilierte Demo.exe stellt einen wirklich fantastisch funktionierenden Screen-Video-Recorder mit vielen Optionen dar. Leider kann ich die Sourcen nicht in Delphi 10 Seattle kompilieren, weil der Compiler in scHighTimer.pas über die Typ-Inkompatibilität von NativeUInt und Cardinal meckert:

Delphi-Quellcode:
procedure TimeCallBack(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
begin
  PostMessage(HWND(dwUser), WM_TIMER, uTimerID, 0);
end;

// [dcc32 Error] scHighTimer.pas(344): E2010 Incompatible types: 'NativeUInt' and 'Cardinal':
FTimerID := TimeSetEvent(FInterval, FInterval, TimeCallBack, FWindowHandle, TIME_PERIODIC);
Ich kann aber die Quelle der Typ-Inkompatibiltät nicht finden, weil der Compiler dabei auf TimeCallBack hinweist, dort aber kein solcher Typ zu finden ist.

mkinzler 21. Jan 2016 10:59

AW: Problem mit Typ-Inkompatibilität
 
Was für einen Typ hat TimeCallBack?

TiGü 21. Jan 2016 11:15

AW: Problem mit Typ-Inkompatibilität
 
Aus Winapi.MMSystem:
Delphi-Quellcode:
  TFNTimeCallBack = procedure(uTimerID, uMessage: UINT;
    dwUser, dw1, dw2: DWORD_PTR) stdcall;

function timeSetEvent(uDelay, uResolution: UINT;
  lpFunction: TFNTimeCallBack; dwUser: DWORD_PTR; uFlags: UINT): MMRESULT; stdcall;
Aus Winapi.Windows:
Delphi-Quellcode:
 
ULONG_PTR = NativeUInt;
DWORD_PTR = ULONG_PTR;
Ich wette, das FWindowHandle als ein unsigned 32-Bit Integer definiert ist (z.B. LongWord, Cardinal, UINT).
Ändere die Definition und es sollte gehen:
Delphi-Quellcode:
FWindowHandle: THandle;


EDIT:
Außerdem musst du die Definition der Callback von
Delphi-Quellcode:
 dwUser, dw1, dw2: DWORD
auf
Delphi-Quellcode:
 dwUser, dw1, dw2: DWORD_PTR
ändern!

PeterPanino 21. Jan 2016 11:59

AW: Problem mit Typ-Inkompatibilität
 
Zitat:

Zitat von TiGü (Beitrag 1327681)
Ich wette, das FWindowHandle als ein unsigned 32-Bit Integer definiert ist (z.B. LongWord, Cardinal, UINT).
Ändere die Definition und es sollte gehen:
Delphi-Quellcode:
FWindowHandle: THandle;

Danke, es war als HWND definiert, ich habe es trotzdem geändert auf Thandle.

Zitat:

Zitat von TiGü (Beitrag 1327681)
Außerdem musst du die Definition der Callback von
Delphi-Quellcode:
 dwUser, dw1, dw2: DWORD
auf
Delphi-Quellcode:
 dwUser, dw1, dw2: DWORD_PTR
ändern!

Die entscheidende Beruhigung des Compilers erfolgte aber durch den Ersatz von DWORD durch DWORD_PTR. Vielen Dank dafür!

Nun hat sich der Compiler anderen Fehlern zugewendet, z.B.:

[dcc32 Error] scWaveUtils.pas(967): E2003 Undeclared identifier: 'TimeSeparator'

Diese Screen-Kamera-Komponente wäre ein guter Beitrag für die Delphi-Praxis Code Library, wenn sie in Delphi 10 Seattle funktionieren würde. Könnte sich jemand, der sich damit auskennt, den Code für Delphi 10 Seattle kompatibel machen?

Uwe Raabe 21. Jan 2016 12:04

AW: Problem mit Typ-Inkompatibilität
 
Zitat:

Zitat von PeterPanino (Beitrag 1327685)
[dcc32 Error] scWaveUtils.pas(967): E2003 Undeclared identifier: 'TimeSeparator'

Der heißt jetzt
Delphi-Quellcode:
FormatSettings.TimeSeparator
.

PeterPanino 21. Jan 2016 12:29

AW: Problem mit Typ-Inkompatibilität
 
Vielen Dank an alle! Die restlichen "Altlasten" habe ich jetzt selbst korrigiert und die Komponente dann installiert!

himitsu 21. Jan 2016 12:46

AW: Problem mit Typ-Inkompatibilität
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1327686)
Delphi-Quellcode:
FormatSettings.TimeSeparator
.

Seit bestimmt 10 Jahren (eine gaaanz Weile lang war das alte noch als Depricated vorhanden)

f1delphi 27. Sep 2017 22:07

AW: Problem mit Typ-Inkompatibilität
 
Zitat:

Zitat von PeterPanino (Beitrag 1327675)
Hallo!

Ich habe diesen Source Code auf Torry gefunden: Professional Screen Camera Component v.5.2.3.0. Die enthaltene kompilierte Demo.exe stellt einen wirklich fantastisch funktionierenden Screen-Video-Recorder mit vielen Optionen dar. Leider kann ich die Sourcen nicht in Delphi 10 Seattle kompilieren, weil der Compiler in scHighTimer.pas über die Typ-Inkompatibilität von NativeUInt und Cardinal meckert:

Delphi-Quellcode:
procedure TimeCallBack(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
begin
  PostMessage(HWND(dwUser), WM_TIMER, uTimerID, 0);
end;

// [dcc32 Error] scHighTimer.pas(344): E2010 Incompatible types: 'NativeUInt' and 'Cardinal':
FTimerID := TimeSetEvent(FInterval, FInterval, TimeCallBack, FWindowHandle, TIME_PERIODIC);
Ich kann aber die Quelle der Typ-Inkompatibiltät nicht finden, weil der Compiler dabei auf TimeCallBack hinweist, dort aber kein solcher Typ zu finden ist.

I stucked to the same problem. Does it possible to post fixed unit please?

t.roller 28. Sep 2017 06:34

AW: Problem mit Typ-Inkompatibilität
 
Liste der Anhänge anzeigen (Anzahl: 1)
An XE7 angepasst - sollte bei Delphi 10 Seattle auch gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz