Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi C --> Delphi übersetzen (https://www.delphipraxis.net/71151-c-delphi-uebersetzen.html)

Mystic 9. Jun 2006 19:53


C --> Delphi übersetzen
 
Ich versuche mit Delphi eine DLL anzusprechen. Die entsprechende Header-Datei enthält u.a. folgenden Code:

Code:
#if defined(_WIN32) && !defined(_XBOX)
 /* _OPENAL32LIB is deprecated */
 #if defined(AL_BUILD_LIBRARY) || defined (_OPENAL32LIB)
  #define AL_API __declspec(dllexport)
 #else
  #define AL_API __declspec(dllimport)
 #endif
#else
 #define AL_API extern
#endif

#if defined(_WIN32)
 #define AL_APIENTRY __cdecl
#else
 #define AL_APIENTRY
#endif

typedef int ALenum;
typedef float ALfloat;

AL_API void AL_APIENTRY alGetListenerf( ALenum param, ALfloat* value );

AL_API void AL_APIENTRY alGetListener3f( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 );

AL_API void AL_APIENTRY alGetListenerfv( ALenum param, ALfloat* values );
Kann mir jemand hier helfen?

Mich verwirrt hier vor allem ALfloat* value und ALfloat *value. Was ist der Unterschied?

Olli 9. Jun 2006 20:07

Re: C --> Delphi übersetzen
 
Es gibt keinen Unterschied. Es ist eigentlich Geschmackssache wo man das Sternchen hinpackt. Solange wie sich die Anzahl der Sternchen nicht ändert ... willst du es

Delphi-Quellcode:
type ALfloat = Float;
type PALfloat = ^ALfloat;
type ALenum = Integer;

procedure alGetListenerf(param:ALenum; var value:ALfloat); cdecl;
procedure alGetListener3f(param: ALenum; var value1, value2, value3: ALfloat); cdecl;
procedure alGetListenerfv(param: ALenum; values: PALfloat); cdecl;
Statt PALfloat könntest du auch einen Arraytyp 0..0 deklarieren. So wie es in C aussieht, dürfte es sich um die Übergabe eines Arrays von mehreren Floats handeln ...

Mystic 9. Jun 2006 20:09

Re: C --> Delphi übersetzen
 
Aller klar. Danke. :)

Waldteufel 9. Jun 2006 20:12

Re: C --> Delphi übersetzen
 
Hi Mystic.

Zitat:

Zitat von Mystic
Mich verwirrt hier vor allem ALfloat* value und ALfloat *value. Was ist der Unterschied?

Gar keiner. Sind beides Pointer auf float. ;-)

Grob:

Delphi-Quellcode:
type
  PFloat = ^float;
  AFloat = array of float;

procedure alGetListenerf(Param : Integer; Value : PFloat ); cdecl;
procedure alGetListener3f(Param : Integer; value1, value2, value3 : PFloat ); cdecl;
procedure alGetListenerfv(Param : Integer; Values : AFloat ); cdecl;
Edit: Roten Kasten such...

SirThornberry 9. Jun 2006 20:52

Re: C --> Delphi übersetzen
 
Zitat:

AFloat = array of float;
Das sollte da gar nicht hinn. Denn ein "Array of" ist ein dynamisches Array von Delphi was mit C so nicht kompatibel ist.

Robert Marquardt 10. Jun 2006 07:55

Re: C --> Delphi übersetzen
 
Ob "ALfloat *Value" zu "Value: PALfloat" oder zu "var Value: ALfloat" zu uebersetzen ist, kann nur geraten werden.
In diesem Fall geben die Parameternamen einen recht sicheren Hinweis was verwendet werden soll.

Delphi-Quellcode:
type
  ALenum = Integer;
  PALfloat = ^ALfloat;
  ALfloat = Single;

procedure alGetListenerf(param: ALenum; var value: ALfloat); cdecl;
procedure alGetListener3f(param: ALenum; var value1: ALfloat; var value2: ALfloat; var value3: ALfloat); cdecl;
procedure alGetListenerfv(param: ALenum; values: PALfloat); cdecl;

Olli 10. Jun 2006 12:00

Re: C --> Delphi übersetzen
 
Zitat:

Zitat von Robert Marquardt
Ob "ALfloat *Value" zu "Value: PALfloat" oder zu "var Value: ALfloat" zu uebersetzen ist, kann nur geraten werden.
In diesem Fall geben die Parameternamen einen recht sicheren Hinweis was verwendet werden soll.

Delphi-Quellcode:
type
  ALenum = Integer;
  PALfloat = ^ALfloat;
  ALfloat = Single;

procedure alGetListenerf(param: ALenum; var value: ALfloat); cdecl;
procedure alGetListener3f(param: ALenum; var value1: ALfloat; var value2: ALfloat; var value3: ALfloat); cdecl;
procedure alGetListenerfv(param: ALenum; values: PALfloat); cdecl;

:wall: stimmt, Single wäre die korrekte Übersetzung gewesen. Der Rest ist ja quasi gleich ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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