Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Probleme mit DWORD und Integer (https://www.delphipraxis.net/57085-probleme-mit-dword-und-integer.html)

Chris P 15. Nov 2005 16:52


Probleme mit DWORD und Integer
 
Hi Leute,

ich benutze eine Funktion um zu ermitteln wie viel Tracks auf einer Audio CD sind bzw. ob eine CD eingelegt ist


Die Funktion ist folgendermaßen deklariert:
Delphi-Quellcode:
DWORD WINAPI BASS_CD_GetTracks(
    DWORD drive
);
Ist der Rückgabewert -1 dann ist keine CD eingelegt:
Delphi-Quellcode:
var
   TrckCount: DWORD;
begin

   TrckCount := BASS_CD_GetTracks(0);
   if TrckCount = -1 then
      ShowMessage('Keine CD eingelegt!');

end;
Wenn jetzt keine Audio CD eingelegt ist dann müsste TrckCount -1 sein!
Aber TrckCount ist eine riesige Zahl.
-1 kommt nur zurück wenn ich TrckCount als Integer deklariere.

Warum muss ich also den Typ Integer nehmen wenn die Funktion einen DWORD zurückgibt!
Woran liegt das??

Bernhard Geyer 15. Nov 2005 16:57

Re: Probleme mit DWORD und Integer
 
Zitat:

Zitat von Chris P
Warum muss ich also den Typ Integer nehmen wenn die Funktion einen DWORD zurückgibt!
Woran liegt das??

Daran das man bei C öfters mal "komische" Konstrukte wählt bzw. der Entwickler der Funktion hat auch nicht aufgepaßt.

Probier mal folgendes:
Delphi-Quellcode:
   if TrckCount = DWORD(-1) then
DWORD und Integer haben jeweils den gleichen Speicherbedarf unter Win32 und können deshalb in C-DLL-Schnittstellen (bezüglich keine Exception-Gefahr) wahlweis ausgetausch werden.

Chris P 15. Nov 2005 17:03

Re: Probleme mit DWORD und Integer
 
Ich benutze aber Delphi.

Die Funktionsdeklaration habe ich nur aus einer C-Hilfe genommen.

Luckie 15. Nov 2005 17:11

Re: Probleme mit DWORD und Integer
 
Zitat:

Zitat von Chris P
Ich benutze aber Delphi.

Das hat damit nichts zu tun, da die DLL offensichtlich in C geschrieben ist.

marabu 15. Nov 2005 18:56

Re: Probleme mit DWORD und Integer
 
Der Begriff DWORD ist nunmal historisch belegt. Auf Hardwareebene spricht man vom Doppelwort - das sind 2 Maschinenwörter á 16 bit. Was darin gespeichert ist, weiß nur der Programmierer, sonst niemand. DWORD hat dann später über den Assembler Einzug in C gehalten und steht immer noch für einen Speicherbereich von 32 bit.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr.

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