[BCB] konflikt shlobj i vcl

0

Napisałem skromną biblioteczke kożystającą z shlobj.h. Ale gdy chcialem jej użyć w aplikacji okienkowej pojawiło sie kilka błędów:

[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Error] shlobj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE'

Błędy mówią o wielokrotnej deklaracji tych struktur, jednak jak usune z projektu shlobj są to wtedy "Undefined structure", zatem wnioskuje, że występują tylko w shlobj (a dokladniej w zawartym w nim shobjidl.h).
Dlaczego vcl.h i shobjidl.h sie gryzą ??? jest na to jakas rada ???

0

Byc moze jak uzywasz tego pod VCLem, to sa predefiniowane jakies makra, od ktorych shlobj.h uzaleznia swoj kod. Takim makrem moze byc np. WIN albo WIN32. No a w shlobj.h cos zle napisali i dla pewnej kombinacji tych makr jakies 2 fragmenty kodu sa wlaczane dwukrotnie zamiast jeden raz.

Jedyne co moge Ci poradzic to przejrzec kod shlobj i zobaczyc, gdzie sa definicje makr o ktorych pisze kompilator i sprawdzic jakie sa warunki dojscia do nich (czyli trzeba sprawdzic warunki po #ifdef, #if defined() itp.)

0

Prześladuje mnie ostatnio ten temat ;-)

Musisz w projekcie zdefiniować coś takiego:
#define NO_WIN32_LEAN_AND_MEAN
Najlepiej w głównym pliku cpp, ale nie koniecznie (czasem trzeba pokombinować). To dosyć częsty i nawet znany problem z "shlobj.h"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.