das leidige Problem C++ nach PB

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

das leidige Problem C++ nach PB

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

*ps.Struct1 = @*pObjData\dwData;
?
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

Ein Pointer ist eine Variable^^

Edit: cutted
-.-"
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 '->'.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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;
        }
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten