![]() |
cpp to delphi struct Problem
Hallo Leute,
ich habe ein Problem mit folgender cpp Struktur:
Code:
typedef struct
{ LONG nSize; // size of the struct TCHAR sCountry[MAXLEN_COUNTRY]; // country TCHAR sCity[MAXLEN_CITY]; // city TCHAR sZipCode[MAXLEN_ZIPCODE]; // postal code TCHAR sStreet[MAXLEN_STREET]; // street TCHAR sHouseNumber[MAXLEN_HOUSENUMBER]; // housenumber float fX; // x position float fY; // y position NCK_COORD_FORMAT coordFormat; // format 0:WGS84, 1:Gauss-Krueger NCKErrorStatus errStatus; // error status in case of conversion } NCKTarget;
Code:
Meine Delphi Übersetzung
#define MAXLEN_COUNTRY 10 // country
#define MAXLEN_CITY 100 // city #define MAXLEN_ZIPCODE 20 // postal code #define MAXLEN_STREET 100 // street #define MAXLEN_HOUSENUMBER 20 // housenumber #define MAXLEN_MESSAGE 128 // message for status #define MAXLEN_GPSSTRING 256 // GPS string
Delphi-Quellcode:
Nun ist es so, dass in der cpp Anwendung das Struct 400 Bytes hat und die Delphiversion 396 Bytes. Was mache ich falsch? Liegt es vielleicht an den Aufzählungstypen?? Wäre schön wenn jemand helfen könnte!!
type
TNCKTarget = record nSize: integer; // size of the struct sCountry: array[0..9] of char; // country sCity: array[0..99] of char; // city sZipCode: array [0..19] of char; // postal code sStreet: array[0..99] of char; // street sHouseNumber: array[0..19] of char; // housenumber fX: single; // x position fY: single; // y position coordFormat: NCK_COORD_FORMAT; // format 0:WGS84, 1:Gauss-Krueger errStatus: TNCKErrorStatus; // error status in case of conversion end;
Delphi-Quellcode:
type
NCK_COORD_FORMAT = (COORD_FORMAT_WGS84 = 0, COORD_FORMAT_GK = 1);
Code:
enum NCK_COORD_FORMAT
{ COORD_FORMAT_WGS84 = 0, COORD_FORMAT_GK };
Delphi-Quellcode:
type
NCK_ERROR_CODE = (NCKERR_OK = 0, NCKERR_CONVERT_COORD_TO_ADDRESS = 1, NCKERR_CONVERT_ADDRESS_TO_COORD = 3);
Code:
enum NCK_ERROR_CODE
{ NCKERR_OK = 0, NCKERR_CONVERT_COORD_TO_ADDRESS, NCKERR_CONVERT_ADDRESS_TO_COORD }; |
Re: cpp to delphi struct Problem
Was issn "TNCKErrorStatus" bzw wie ist dieser Typ aufgebaut? Falls das "NCK_ERROR_CODE" sein soll, hat der Typ "TNCKTarget" als packet record bei mir nur 264 Byte und nicht 396 Byte!
mfg |
Re: cpp to delphi struct Problem
oh hab ich vergessen zu posten...
Delphi-Quellcode:
type
TNCKErrorStatus = record nCode: NCK_ERROR_CODE; // status code, 0: Ok, >0: error sMessage: array[0..127] of char; // status message in case of error end; |
Re: cpp to delphi struct Problem
Hi,
ich glaube man kann da irgendwas mit der Anweisung ![]() Ansonsten vllt. einfach Dummyfelder einbauen? Chris |
Re: cpp to delphi struct Problem
Zitat:
Probiere mal {$MINENUMSIZE 4}. |
Re: cpp to delphi struct Problem
Zitat:
Die Record-Struktur ist bei mir 400 Byte groß. "packed record", wie schon genannt, ist das Stichwort. :)
Delphi-Quellcode:
TNCKErrorStatus = packed record
(* *) end; TNCKTarget = packed record (* *) end; |
Re: cpp to delphi struct Problem
bei packed record war mein record 392 byte groß
aber {$MinEnumSize 4} hat geholfen danke leute schönes wochenende |
Re: cpp to delphi struct Problem
Ich will hier nochmal bestaetigen: Enums sind in C/C++ immer 4 Byte gross.
Das liegt daran das sie in C den Integern deutlich naeher verwandt sind als bei Pascal. |
Re: cpp to delphi struct Problem
jetzt müsst ihr mir nochmal weiterhelfen...
ich denke mit dem Record ist jetzt alles OK
Delphi-Quellcode:
Dieses sendMessage gibt mir nun auch ne 1 zurück (war mit falschem Record noch ne 0) nur bekomme ich irgendwie kein wm_CopyData von der Fremdapplication zurück.
sendMessage(serverhandle, wm_CopyData, 0, integer(@acopydata));
Delphi-Quellcode:
Mach ich da noch was falsch?
procedure TNavigon.appmessage(var Msg: TMsg; var Handled: boolean);
begin if msg.message = NCK_ANNOUNCE_SERVER_TO_CLIENT then begin serverhandle := msg.lParam; frmmain.Form1.JvMemo1.Lines.Add('Serverhandle: ' + IntToStr(serverhandle)); writeln('Serverhandle: ' + IntToStr(serverhandle)); end; if msg.message = WM_COPYDATA then // hier kommt kein WM_COPYDATA an frmmain.Form1.JvMemo1.Lines.Add('WM_COPYDATA'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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