Mam ogromny problem z kompatybilnoscia wstecz na Visual Studio 2008.
Jest projekt, ktory sklada sie z kodu w C#, managed DLL w c++ ktora
odnosi sie do unmanaged DLLs.
Na starym komputerze wszystko bylo pod Visual 2005 w x86 wylacznie i
dizalalo OK. Na nowym windows x64 skompilowalem to pod x64 i tez dziala.
Problem zaczyna sie kiedy chce to wszystko skompilowac i uruchomic w
x86! Kompiluje sie bez problemu, ale kiedy sie uruchamia, wywala sie z
bledami typu:
The specified module could not be found. (Exception from HRESULT:
0x8007007E)
czy tez
Troubleshooting Exceptions: System.BadImageFormatException
Na tej stronce pisze, ze to przyczyna wymieszania kodu
http://msdn.microsoft.com/en-us/library/k7137bfe(VS.80).aspx
Tylko ze ja wszystko kompiluje z parametrami /machine:x86 /platform:x86
Juz odchodze od zmyslow bo nigdzie sie nie moge dogrzebac co to za
problem. Raczej nie chodzi o DLL bo probowalem skompilowanych przeze
mnie jak i gotowych x86 wiec tu raczej nic sie nie dizeje. Gdzies na
styku z C# wszystko sie rozlatuje.
Czy macie jakies doswiadczenie i pomysly co z tym wszystkim zrobic
dalej? Zalezy mi na tym, bym mogl kompilowac na obie platformy, nie
tylko na x64!
Dzieki z gory,
P.
Oczywiście te unmanaged DLL są skompilowane na tą samą wersję procesora
co ta managed DLL?
> Na starym komputerze wszystko bylo pod Visual 2005 w x86 wylacznie i
> dizalalo OK. Na nowym windows x64 skompilowalem to pod x64 i tez dziala.
>
> Problem zaczyna sie kiedy chce to wszystko skompilowac i uruchomic w
> x86! Kompiluje sie bez problemu, ale kiedy sie uruchamia, wywala sie z
> bledami typu:
> The specified module could not be found. (Exception from HRESULT:
> 0x8007007E)
>
> czy tez
>
> Troubleshooting Exceptions: System.BadImageFormatException
No to wyraźnie wskazuje, że któraś DLL wciąż jest skompilowana dla x64.
Pamiętaj, że bezwzględnie WSZYSTKIE biblioteki muszą być w wersji na ten
sam procesor, poza kodem .Net, który może być z target=Any, ale wtedy
biblioteki niezarządzane muszą być w wersji takiej jak windows.
> Na tej stronce pisze, ze to przyczyna wymieszania kodu
> http://msdn.microsoft.com/en-us/library/k7137bfe(VS.80).aspx
>
> Tylko ze ja wszystko kompiluje z parametrami /machine:x86 /platform:x86
Te unmanaged też?
tm
Wszystkie sa x86, ale musze sie dogrzebac jeszcze do zaleznosci w tych
unmanaged. Mam przeczucie ze ktoras z nich odnosi sie poprzez sicezke do
windows32 katalogu czy cos takiego i zasysa x64 biblioteke bo pod xp x64
wszystkie 32 bitowe wyladowaly w syswow64. To na razie jedyne
wytlumaczenie jakie mi przychodzi do glowy .... Bo nawet mam jeden
projekt skopiowany po kompilacji z kompa z windows x86 i dzieje sie to
samo choc jest to inny projekt ...
>
>> Tylko ze ja wszystko kompiluje z parametrami /machine:x86 /platform:x86
> Te unmanaged też?
Czesc tych unmanaged jest skompilowana wiec nie mam na nie wplywu - ale
sa dwie wersje, oddzielnie dla x86 i x64. Jeszcze poszukam tych co na
nie wplywu nie mam.
Znasz cos dobrego do przeszukiwania DLLi za zaleznosciami?
Dzieki,
p.
stary dobry Dependency Walker
Wiktor Zychla