Jako że w devie normalnie nie ma libmsvcrt.a (przynajmniej u mnie ) to najpierw go sobie robimy (poprawka: mam takie coś, ale to to ma troszkę ponad 1KB)
- Dumpujemy listę exportowanych funkcji dowolnym programem który to potrafi (link, exescope), do pliku.
- Otwieramy dump w notatniku i usuwamy informacje dodane przez program dumpujący, tak by zostały tylko nazwy funkcji
- Na samej górze dopisujemy dwie linie:
LIBRARY msvcrt.dll
EXPORTS
- Całość wygląda tak:
LIBRARY msvcrt.dll
EXPORTS
$I10_OUTPUT
??0__non_rtti_object@@QAE@ABV0@@Z
// jeszcze sporo takich dziwadeł
inp
inpd
inpw
outp
outpd
outpw
Resztę funkcji pomijam bo szkoda zaśmiecać Forum. W sumie Tobie wystarczy 6 ostatnich funkcji, więc nie potrzebujesz dumpera.
- Tak powstały plik zapisz w katalogu dev-cpp/bin jako msvcrt.def i otwórz w tym katalogu linię poleceń. Uruchom poniższe polecenie by zbudować libmsvcrt.a
dlltool -k -d msvcrt.def -l libmsvcrt.a
- Nowo powstały plik libmsvcrt.a przenosisz do dev-cpp/lib. Jeżeli masz tam juz libmsvcrt.a to zapisz nowy plik pod inną nazwą, np libmsvcrt2.a.
No i teraz standardowo tworzysz projekt, dodajesz w opcjach libmsvcrt.a (ten nowy), a w kodzie piszesz
__declspec(dllimport) unsigned char __cdecl inp(unsigned short port);
__declspec(dllimport) unsigned char __cdecl outp(unsigned short port, unsigned char value);
...
while (1) {outp(888, inp(888)^255); Sleep(250);}