Jak to skompilować stary kod znaleziony na sieci

0

Witam! znalazłem w necie stronkę http://wildtramper.com/sw/cr2/cr2.html

jest tam kod do interesującego mnie programu który ma konwertoac pliki z formatu cr2 do innych plików graficznych: plik cr2.zip , ale nie umiem skompilować umieszczonych tam plików .... jeżeli tkoś mógłby mi napisać, jak mogę to zrobić.

pozdro
Krystian

0

W pakiecie jest skompilowany plik Cr2Codec.exe, a jego ikonka – niebieskie wieżowce – sugeruje, że go skompilowano C++ Builderem.

Dla próby spróbowałem MS Visual C++:

cl cr2codec.cpp getput.cpp rawutl.cpp tiffut`code>`
tiffutl.cpp(121) : error C2105: '++' needs l-value
tiffutl.cpp(125) : error C2105: '++' needs l-value
tiffutl.cpp(144) : error C2105: '++' needs l-value
tiffutl.cpp(148) : error C2105: '++' needs l-value
tiffutl.cpp(165) : error C2105: '++' needs l-value
tiffutl.cpp(181) : error C2105: '++' needs l-value
tiffutl.cpp(192) : error C2105: '++' needs l-value

oraz GCC:

gcc cr2codec.cpp getput.cpp rawutl.cpp tiffut`code>`
tiffutl.cpp:121: error: lvalue required as increment operand
tiffutl.cpp:125: error: lvalue required as increment operand
tiffutl.cpp:144: error: lvalue required as increment operand
tiffutl.cpp:148: error: lvalue required as increment operand
tiffutl.cpp:165: error: lvalue required as increment operand
tiffutl.cpp:181: error: lvalue required as increment operand
tiffutl.cpp:192: error: lvalue required as increment operand

Czyli generalnie ten sam problem. Być może C++ Builder dopuszcza te linijki. Nie mam jak sprawdzić niestety.

Edit: jeszcze próba z Watcom C++:
wcl386 cr2codec.cpp getput.cpp rawutl.cpp tiffutl.cpp

TiffUtl.cpp(121): Error! E591: col(34) operand must be an lvalue (cast produces rvalue)
TiffUtl.cpp(125): Error! E591: col(34) operand must be an lvalue (cast produces rvalue)
TiffUtl.cpp(144): Error! E591: col(34) operand must be an lvalue (cast produces rvalue)
TiffUtl.cpp(148): Error! E591: col(34) operand must be an lvalue (cast produces rvalue)
TiffUtl.cpp(165): Error! E591: col(32) operand must be an lvalue (cast produces rvalue)
TiffUtl.cpp(181): Error! E591: col(32) operand must be an lvalue (cast produces rvalue)
TiffUtl.cpp(192): Error! E591: col(30) operand must be an lvalue (cast produces rvalue)

Wychodzi że to jakaś borlandowska konstrukcja niedopuszczalna w żadnym innym kompilatorze...

0

O ROTFL :D
To stare Borlandy były aż tak zjeb***, że postinkrementacja chodziła na rvalue? :D Tego nie wiedziałem, kolejna perełka.

0

możecie mi więc powiedzieć jak to skompilować ?? :) ewentualnie przerobić żeby się dało skompilować pod vs lub devc++ ??

0

Przecież dostałeś odp: szukaj jakiegoś starszego kompilatora Borlanda albo przerób inkrementację ;]

0

felerne linijki wyglądają przykładowo tak:

*((tU16 *) pData)++ = GET2();

gdzie tU16 to unsigned short, pData to void*, a GET2 zwraca tU16.
Czy ktoś wie co to dokładnie miałoby znaczyć?

0

Zapisanie pod pData potraktowane jako wskaźnik o odpowiednim typie, zapisanie pod nim i przesunięcie wskaźnika na kolejny element, czyli o rozmiar typu, na który rzutowano. Przypomina to trochę użycie iteratorów, tylko jest, jak mawia cepa, z d**y.

0

oO

0

czyli, żeby wprowadzać jak najmniej zmian, powinno zadziałać przez tymczasową zmienną:

tU16 *tmp = (tU16 *)pData;
*(tmp)++ = GET2();
0

poprawiłem to i faktycznie teraz sie kompiluje ;-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1