Seite 1 von 1

das leidige Problem C++ nach PB

Verfasst: 25.09.2007 20:15
von nicolaus
Hi,

Brauch mal wieder hilfe beim konvertieren von C++ nach PB.
Es geht um diese Zeile aus C++

Code: Alles auswählen

Struct1 *pS = (Struct1*)&pObjData->dwData;
Wie muß die in PB aussehen?
Ich versuche es so doch scheint das nicht richtig zu sein

Code: Alles auswählen

*ps.Struct1 = *pObjData\dwData;
Danke schon mal

Verfasst: 25.09.2007 20:45
von edel

Code: Alles auswählen

*ps.Struct1 = @*pObjData\dwData;
?

Verfasst: 25.09.2007 21:03
von #NULL
[ich kenn mich nicht wirklich aus in c++, also spekulier ich mal..]

da der &-operator verwendet wird, ist pObjData da nicht gar kein pointer, sondern eine schlichte variable?
also vielleicht eher so:

Code: Alles auswählen

*ps.Struct1 = @pObjData\dwData
und was ist mit dem type-cast? scheinbar ist das structur-feld gar nicht vom selben typ wie der pointer.

Verfasst: 25.09.2007 21:06
von Green Snake
Ein Pointer ist eine Variable^^

Edit: cutted

Verfasst: 25.09.2007 21:10
von edel
#NULL hat geschrieben:und was ist mit dem type-cast? scheinbar ist das structur-feld gar nicht vom selben typ wie der pointer.
Das ist PB egal, PB macht das "automatisch".
Und es handelt sich bei pObjData sehr wohl um ein
Zeiger, sonst wuerde dort ein '.' stehen und nicht '->'.

Verfasst: 25.09.2007 21:15
von #NULL
das -> wird ja benötigt, eben weil kurz vorher pObjData dereferenziert wurde.

<edit>
wieder mist, -> hat ja höherer priorität. hast wohl recht

Verfasst: 25.09.2007 22:45
von nicolaus
Ok ích danke euch erstmal für die Hilfe.
Da ich leider noch immer nicht weiter komme werd ich mal die relevanten sachen des C++ codes posten denn es gibt noch ne stelle die ich nit nach PB umgesetzt bekomme.

Code: Alles auswählen

struct Struct1
{
    char    title[256];
    double  kohlsmann;
    double  altitude;
    double  latitude;
    double  longitude;
};

....
....

        case SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE:
        {
            SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE *pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE*)pData;
            
            switch(pObjData->dwRequestID)
            {
                case REQUEST_1:
                {
                    DWORD ObjectID = pObjData->dwObjectID;
                    Struct1 *pS = (Struct1*)&pObjData->dwData;
                    if (SUCCEEDED(StringCbLengthA(&pS->title[0], sizeof(pS->title), NULL))) // security check
                    {
                        printf("\nObjectID=%d  Title=\"%s\"\nLat=%f  Lon=%f  Alt=%f  Kohlsman=%.2f", ObjectID, pS->title, pS->latitude, pS->longitude, pS->altitude, pS->kohlsmann );
                    } 
                    break;
                }

                default:
                   break;
            }
            break;
        }
Wie muß den die Struct1 in PB aussehen und dann auch der teil aus dem C++ code

Code: Alles auswählen

... &pS->title[0].....
Danke euch schon mal.

Nico

Verfasst: 26.09.2007 00:11
von mk-soft
Fehlen noch viele Struktur Informationen.

Aber die richtung müste stimmen

Code: Alles auswählen

; struct Struct1
; {
;     char    title[256];
;     double  kohlsmann;
;     double  altitude;
;     double  latitude;
;     double  longitude;
; };

Structure Struct1
  title.s{256} ; String fester länge
  kohlsmann.d
  altitude.d
  latitude.s
  longitude.d
EndStructure


Structure SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE ; ? Interface
  ;?
  dwRequestID.l
  *dwData.l ;?
  ;?
EndStructure
; ....
; ....
; 
;         Case SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE:
;         {
;             SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE *pObjData = (SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE*)pData;
           *pObjData.SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE = pData;
           
            Select pObjData\dwRequestID
            ;{
                Case REQUEST_1:
                ;{
                    ;DWORD ObjectID = pObjData->dwObjectID;
                    ObjectID = *pObjData\dwObjectID;
                    ;Struct1 *pS = (Struct1*)&pObjData->dwData;
                    *pS.struct1 = *pObjData\dwData;
;                     If (SUCCEEDED(StringCbLengthA(&pS->title[0], SizeOf(pS->title), NULL))) // security check
;                     {
;                         printf("\nObjectID=%d  Title=\"%s\"\nLat=%f  Lon=%f  Alt=%f  Kohlsman=%.2f", ObjectID, pS->title, pS->latitude, pS->longitude, pS->altitude, pS->kohlsmann );
;                     }
                    Break;
                ;}

                Default;
                   Break;
            EndSelect;}
            Break;
        }