Fragen zu Strukturen /kopieren und entschlüsseln



  • Hallo,

    ich habe eine Struktur:

    DIEFFECT diEffect;
    	ZeroMemory( &diEffect, sizeof(diEffect) );
    	DWORD Axes[2] = { DIJOFS_X, DIJOFS_Y };
    	LONG Direction[2] = { 90 * DI_DEGREES, 90 * DI_DEGREES };
    	diConstant.lMagnitude			= DI_FFNOMINALMAX;
    	diEffect.dwSize					= sizeof(DIEFFECT);
    	diEffect.dwFlags				= DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;
    	diEffect.dwDuration				= (DWORD)(2 * DI_SECONDS);
    	diEffect.dwGain					= DI_FFNOMINALMAX;
    	diEffect.rglDirection			= Direction;
    	diEffect.dwTriggerButton		= DIEB_NOTRIGGER;
    	diEffect.dwTriggerRepeatInterval= 0;
    	diEffect.cAxes					= 2;
    	diEffect.rgdwAxes				= Axes;
    	diEffect.cbTypeSpecificParams	= sizeof(DICONSTANTFORCE);
    	diEffect.lpvTypeSpecificParams	= &diConstant;
    

    und möchte diese nun in dieffect2 kopieren.
    In diesem Forum habe ich nun viele Beitrage mit for schleifen gesehen oder
    do while. Geht das nicht auch mit so einer Art memcpy ?
    Ebenso interressiert mich, wie ich aus einem Zeiger auf obiger Struktur
    die Inhalte in diEffect2 mit einem solchen Befehl bekomme.

    und nun zur schwierigen Frage:
    ich will in ein Fenster ausgeben, was die Struktur beinhaltet.
    bei

    diEffect.dwGain = DI_FFNOMINALMAX;

    sollte also später im Fenster ein DI_FFNOMINALMAX stehen. Dies sind jedoch
    Namen für konstante Zahlen / Flags . Wie wandelt man dies nun in einen string ? ohne
    dabei jetzt die Zahl abzufragen und selbst jede einzelne Konstante zu erzeugen ?
    also nicht so:

    variable = ( diEffect.dwGain & DI_FFNOMINALMAX )
    if ( variable )
    { string = "DI_FFNOMINALMAX" }



  • thenoname schrieb:

    ich habe eine Struktur und möchte diese nun in dieffect2 kopieren.
    In diesem Forum habe ich nun viele Beitrage mit for schleifen gesehen oder
    do while. Geht das nicht auch mit so einer Art memcpy ?

    Du kannst eigentlich diEffect einfach dieffect2 zuweisen - oder hab ich da gerade einen Denkfehler 🤡

    dieffect2 = diEffect;
    

    thenoname schrieb:

    Ebenso interressiert mich, wie ich aus einem Zeiger auf obiger Struktur
    die Inhalte in diEffect2 mit einem solchen Befehl bekomme.

    Entweder über den -> Operator, oder indem du den Pointer erst dereferenzierst:

    (*lpDiEffect).lMagnitude;
    lpDiEffect->lMagnitude;
    

    thenoname schrieb:

    ich will in ein Fenster ausgeben, was die Struktur beinhaltet.
    bei diEffect.dwGain = DI_FFNOMINALMAX; sollte also später im Fenster ein DI_FFNOMINALMAX stehen. Dies sind jedoch Namen für konstante Zahlen / Flags . Wie wandelt man dies nun in einen string ? ohne dabei jetzt die Zahl abzufragen und selbst jede einzelne Konstante zu erzeugen ?

    Das geht eigentlich gar nicht so direkt, denn Konstanten werden afaik schon vom Preprozessor ersetzt, sodass im fertigen Code nachher ja nur noch die Zahlenwerte verhanden sind. Das Definieren von Konstanten dient ja eigentlich nur dazu, dass du dir nicht irgendwelche Zahlen merken musst, sondern "sprechende" Namen verwenden kannst 😉 Du wirst also um ein switch/case o.ä. kaum herum kommen.



  • Erst mal Danke für die schnelle Antwort ...

    hab gleich meinen Fehler erkannt, es muss heissen:
    diEffect2 = *diEffect ;

    Mit den Flags habe ich nur gehofft, billig an die Namen zu kommen 😃

    Eigentlich stehen diese ja in der .h alle drin.



  • thenoname schrieb:

    hab gleich meinen Fehler erkannt, es muss heissen:
    diEffect2 = *diEffect;

    Aber nur, wenn diEffect ein Pointer ist 😉


Log in to reply