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_DLLCC 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_IUnknownund 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_IUnknownWü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_DLLGruß und Danke,
