IID_IUnknown mit MinGw



  • Hi,

    gerade versuche ich eine COM DLL zu erstellen.
    Leider bekomme ich den Linkerfehler
    D:\COM_dll_MinGw\01_Build/../02_Workspace/i_class.cpp:23: undefined reference to `IID_IUnknown'

    Ich linke gegen libuuid.a:
    $(CC) $(LDFLAGS_DEBUG) -shared -o $(RPATH_OUT)\class_dll.dll $(RPATH_OBJ)\class.o (RPATH\_OBJ)\\i\_class.o -L(PATTH_LIB)\ -luuid -D EXPORT_DLL

    CC ist g++

    Das symbol wird in i_class.cpp verwendet. Aus i_class.cpp wird i_class.o gebaut.

    HRESULT STDMETHODCALLTYPE i_class::QueryInterface(const IID& refiid_GUID,void **ppv)
    {
        HRESULT HR_RetVal=0x00000000;
       // Check if the GUID matches i_class
       // VTable's GUID. Remember that we gave the
       // C variable name IID_IExample to our
       // VTable GUID. We can use an OLE function called
       // IsEqualIID to do the comparison for us.
       if (!IsEqualIID(refiid_GUID, CLASS_ID_I_CLASS)&&
            !IsEqualIID(refiid_GUID, IID_IUnknown))
       {
    
    ....
    

    Woran kann denn das liegen. ??
    Ein nm libuuid.a ergibt:

    unknwn-uuid.o:
    00000000 b .bss
    00000000 d .data
    00000000 N .debug_abbrev
    00000000 N .debug_aranges
    00000000 N .debug_info
    00000000 N .debug_line
    00000000 r .rdata
    00000000 r .rdata$zzz
    00000000 t .text
    00000000 R _IID_IClassFactory
    00000010 R _IID_IUnknown

    und ein nm i_class.o ergibt:

    AUX scnlen 0x78 nreloc 3 nlnno 0
    [ 45](sec 5)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 _CLASS_ID_I_CLASS
    [ 46](sec 6)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __ZTV7i_class
    [ 47](sec 7)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __ZTI7i_class
    [ 48](sec 8)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __ZTS7i_class
    [ 49](sec 10)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __ZTI8IUnknown
    [ 50](sec 9)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __ZTS8IUnknown
    [ 51](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 _IID_IUnknown

    Würde mich über Hilfe freuen.

    Gruß



  • Okay, ich bin einen Schritt weiter glaube ich.
    00000010 R _IID_IUnknown
    bedeutet laut nm doku:
    R External read-only data
    Also vermute ich, das ich die falsche lib eingebunden habe.
    Welche ist denn dann die richtige ??



  • Okay, ich habs,
    man muss genau in dieser Reihenfolge gegen die beiden LIbs ole32 und uuid linken
    $(CC) $(LDFLAGS_DEBUG) -shared -o $(RPATH_OUT)\class_dll.dll $(RPATH_OBJ)\class.o (RPATH\_OBJ)\\i\_class.o -L(PATTH_LIB)\ -lole32 -luuid -D EXPORT_DLL

    Gruß und Danke,
    🙂


Anmelden zum Antworten