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 Namensgebung in einer C++ dll (https://www.delphipraxis.net/168202-namensgebung-einer-c-dll.html)

Grevier 9. Mai 2012 18:13

Namensgebung in einer C++ dll
 
Guten Abend,

ich bin momentan dabei, eine in c++ geschriebene .dll in ein Delphi-Projekt einzubinden. Das ist auch nicht das erste mal und soweit kein Problem. Aber jetzt bin ich auf eine Funktion gestoßen, die ein Struct als Übergabeparameter erwartet. Eigentlich wäre das auch kein Problem, wenn das Objekt nicht folgenden enum enthalten würde:

Code:
typedef enum Procedure {
   SRG,
   OR,
   NONOR,
   SRG_CONFLICT,
   OR_CONFLICT,
   NONOR_CONFLICT_CHOP_DATE
};
Die Tatsache, dass der Enum "Procedure" heißt und das OR mittendrin findet Delphi ziemlich blöd.
Leider liegt mir der Quellcode der dll nicht vor (Sonst hätte ich den Kram auch einfach umbenannt...).

Weiß da jemand eventuell Rat?

Schoneinmal einen schönen Dank im Voraus. ;)

himitsu 9. Mai 2012 18:36

AW: Namensgebung in einer C++ dll
 
Namen sind doch vollkommen egal ... es kommt nur auf die ordinalen Werte drauf an.
Du kannst die Namen also nach belieben umbenennen.

Selbst Folgendes würde problemlos funktionieren. :angle:
Delphi-Quellcode:
{$MINENUMSIZE 4}
type
  a = (b, c, d, e, f, g);

// oder
type
  TMyProcedureEnum = type Integer;

const
   mpSRG = TMyProcedureEnum(0);
   mpOR = TMyProcedureEnum(1);
   mpNONOR = TMyProcedureEnum(2);
   mpSrgConflict = TMyProcedureEnum(3);
   mpOrConflict = TMyProcedureEnum(4);
   mpNonOrConflictChopDate = TMyProcedureEnum(5);
Außerdem mußt du auf die Speichergröße achten und das ist der wichtigste Punkt.
Denn C arbeitet gerne mit Registerbreiten, unter Win32 währe dieser Enum-Typ 4 Byte groß,
während Delphi standardmäßig mit minimalem Speicher arbietet und diesen Enum in 1 Byte packen würde.
3 Byte blieben also undefiniert, was vorallem bei Übergabe an den C-Code (die DLL) probleme bereiten könnte, da die oberen 3 Byte undefiniert währen und Zufallswerte enthalten könnten.

Delphi-Quellcode:
{$Z4} oder {$MINENUMSIZE 4}

implementation 9. Mai 2012 19:36

AW: Namensgebung in einer C++ dll
 
Je nach Version könntest du die Namen auch einfach mit einem
Delphi-Quellcode:
&
maskieren.


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