VARIANT, Windows, Strukturelemente ansprechen unter C



  • Moin,

    ich blickes es nicht mehr.

    Ich versuche, so etwas wie ein HTML-Control in ein Windows-Programm einzusetzen
    und habe ich Web einige (einander verdächtig ähnliche) zu Einbindung in C gefunden.
    Der Compiler holpert zB über folgendes:

    VARIANT varDisp;
    
    varDisp.vt = 0;
    

    und meint

    Error! E1031: Name 'vt' not found in struct/union tagVARIANT

    Wie kommt der auf tagVARIANT ? Wie wird das richtig angesprochen ?
    Eigentlich kann der Compiler unbenannte Strukturen, wieso benennt er die
    trotzdem ?

    Ratlose Grüße, Joe.

    (bei Google war ich schon, hier habe ich auch gesucht)
    ----

    Compiler: Watcom C32, v 1.8, Win XP

    Auszug aus oaidl.h

    typedef struct tagVARIANT {
        union {
            struct __tagVARIANT {
                VARTYPE vt;
                WORD    wReserved1;
                WORD    wReserved2;
                WORD    wReserved3;
                union {
                    LONGLONG            llVal;
                    LONG                lVal;
                    BYTE                bVal;
                    SHORT               iVal;
                    FLOAT               fltVal;
                    DOUBLE              dblVal;
                    VARIANT_BOOL        boolVal;
                    SCODE               scode;
                    CY                  cyVal;
                    DATE                date;
                    BSTR                bstrVal;
                    IUnknown            *punkVal;
                    IDispatch           *pdispVal;
                    SAFEARRAY           *parray;
                    BYTE                *pbVal;
                    SHORT               *piVal;
                    LONG                *plVal;
                    LONGLONG            *pllVal;
                    FLOAT               *pfltVal;
                    DOUBLE              *pdblVal;
                    VARIANT_BOOL        *pboolVal;
                    SCODE               *pscode;
                    CY                  *pcyVal;
                    DATE                *pdate;
                    BSTR                *pbstrVal;
                    IUnknown            **ppunkVal;
                    IDispatch           **ppdispVal;
                    SAFEARRAY           **pparray;
                    struct tagVARIANT   *pvarVal;
                    PVOID               byref;
                    CHAR                cVal;
                    USHORT              uiVal;
                    ULONG               ulVal;
                    ULONGLONG           ullVal;
                    INT                 intVal;
                    UINT                uintVal;
                    DECIMAL             *pdecVal;
                    CHAR                *pcVal;
                    USHORT              *puiVal;
                    ULONG               *pulVal;
                    ULONGLONG           *pullVal;
                    INT                 *pintVal;
                    UINT                *puintVal;
                    struct __tagBRECORD {
                        PVOID       pvRecord;
                        IRecordInfo *pRecInfo;
                    } brecVal;
                } n3;
            } n2;
            DECIMAL decVal;
        } n1;
    } VARIANT;
    typedef VARIANT *LPVARIANT;
    typedef VARIANT VARIANTARG;
    typedef VARIANT *LPVARIANTARG;
    


  • VARIANT varDisp; ist in Wirklichkeit ein struct tagVARIANT varDisp; , darum die Meldung. Und dort gibt es kein vt Element.

    VARIANT varDisp;
    varDisp.n1.n2.vt = 0;
    

    so eine perverse Struktur (eher wie sie hingeschrieben wurde) habe ich noch nie gesehen.



  • Merci,

    typisch MS. Wenn ich das Statement

    #define _FORCENAMELESSUNION
    

    vor windows.h einbinde, läßt es sich zumindest kompilieren.

    Mir graust es auch vor solchen Monstrositäten. Eigentlich ist so etwas nicht nötig.



  • Scheppertreiber schrieb:

    Mir graust es auch vor solchen Monstrositäten. Eigentlich ist so etwas nicht nötig.

    das sind so visual-basic/ole/com relikte. aus C-sicht wirklich übel.
    🙂



  • Eigentlich wollte ich nur aus Faulheit die Dialoge für ein Windowsprogramm als
    HTML schreiben. Ist ja schnell geparst und die Paar Controls die wirklich aktiv
    sind einzufügen ist ja auch kein Problem. Einen recht rudimentären HTML-Interpreter
    hatte ich mal selbstgebaut (eher eine Mischung aus HTML, CSS und PDF).

    So jetzt beim Herumprobieren denke ich an IE5,6,7,8 und was sonst alles noch
    unter Windows herumgeistert. Langsam kommen mir Zweifel ob das wirklich das
    Gelbe vom Ei ist ...



  • Scheppertreiber schrieb:

    Eigentlich wollte ich nur aus Faulheit die Dialoge für ein Windowsprogramm als
    HTML schreiben. Ist ja schnell geparst und die Paar Controls die wirklich aktiv
    sind einzufügen ist ja auch kein Problem. Einen recht rudimentären HTML-Interpreter
    hatte ich mal selbstgebaut (eher eine Mischung aus HTML, CSS und PDF).

    So jetzt beim Herumprobieren denke ich an IE5,6,7,8 und was sonst alles noch
    unter Windows herumgeistert. Langsam kommen mir Zweifel ob das wirklich das
    Gelbe vom Ei ist ...

    würde auch sagen, dass sowas 'ne umständliche fummelei wird und fehleranfällig noch dazu. lad' dir doch irgendwo 'nen ollen msvc 6.0 runter. damit kannste in windeseile grafisch (per darg'n'drop und mfc) dialoge zusammenschustern. das ding hat 'nen codegenerator, der die handlerfunktionen für die steuerelemente und das grundgerüst erstellt, das du nur noch mit leben befüllen musst.
    🙂



  • Meine Idee war eigentlich für die Web- und die CDROM/DVD-Applikationen möglichst
    die gleiche Oberfläche zu verwenden. Ideal wäre, könnte man das 1:1 übernehmen
    (und halr Neugier :-)).

    Ich könnte da auch gleich den Adobe Reader einbauen (es gibt angeblich ein
    Windows-Control von Adobe, ich habe ein Paar Mal da angefragt, es rührt sich
    aber keiner).

    Da wir in der Firma auch mehrere Kunden für den Kram haben, ist es mit HTML
    am Einfachsten, das ein wenig zu "personalisieren". Ansonsten halt wieder Scripts
    die ich interpretieren muß (Controls für etwas HTML-Ähnliches und PDF-Ähnliches
    habe ich mir halt selbstgebaut, halt mit den Befehlen die ich brauche).

    So ein 100% wäre auch mal schön ...


Anmelden zum Antworten