Hi Anton, On 2/16/18 7:35 AM, Anton Romanov wrote:
Hi all,
I'm working on dlls/wmp and I have added code that now requires GUID_NULL. Instead of duplicating its definition I was trying to add "uuid" to IMPORTS section of Makefile. When I do that I get get multiple definitions of various GUIDs. To fix that I have removed #include "initguid.h" from wmp_main.c . That fixes multiple definitions however this brings undefined references such as:
wine/dlls/wmp/oleobj.c:255: undefined reference to `IID_IWMPCore' x86_64-pc-linux-gnu/bin/ld: oleobj.o: relocation R_386_GOTOFF against undefined hidden symbol `IID_IWMPCore' can not be used when making a shared object
now. It is unclear to me what is the right way to fix this issue. Can someone shed some light on a proper way to do that? (I can solve that by duplicating GUID_NULL definition but I was said that its not needed)
There are two main ways of importing uuids. First one, more common, is to add uuid (or other similar library) to IMPORTS in Makefile, which imports uuid from a static lib. This is usually preferred. However, this does not work nice in wmp.dll case because IID_IWMPCore (and other WMP uuids) are not present in any such lib. In such cases we need to use the second way. Note that uuids are usually defined using DEFINE_GUID in headers, see guiddef.h for the macro. It expands to |extern const GUID| unless DEFINE_GUID is defined. If it's defined, full declaration is included. In wmp_main.c we include initguid.h, which defines DEFINE_GUID macro. It means that we will have uuids declared for all headers included in wmp_main.c. That said, if you need more uuids in wmp.dll, just include a file containing their declarations in wmp_main.c. Thanks, Jacek