• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ MikrotikAPI skopiowane ze strony nie kompiluje się.

42 Warsaw Coding Academy
0 głosów
313 wizyt
pytanie zadane 3 stycznia 2020 w C i C++ przez Kamil780 Nowicjusz (120 p.)

Witam. Pojawiłem się na forum z takim drobnym problemem, który próbowałem rozwiązać z pomocą wujka Googla i utknąłem. Uczyłem się C++ jednak tego to jest przedstawione w poniższej bibliotece nie do końca jeszcze rozumiem.

Mam do uruchomienia "bibliotekę" API Mikrotika pod C++. Przebrnąłem przez wiele problemów, między innymi linkowanie i jak się jeszcze okazało z pomocą wujka, kod był pisany pod linuxa więc nagłówek #Include <sys/socket.h> musiał zostać zastąpiony <Winsock2.h>. Większość komunikatów ustąpiła, ale pozostało jeszcze kilka i w tym problem, że już nawet nie wiem o co zapytać wujka.

Kod pobrałem z tego linku. Może to nadal kwestia nagłówka? "Identfikator 'read' jest niezdefiniowany" i tak samo identyfikator 'write'.

Gdyby ktokolwiek z lekka doświadczony w tej tematyce zechciał na to spojrzeć chociażby jednym okiem, było by miło :) A jeszcze fajniej, jak by odpisał hehe.

komentarz 3 stycznia 2020 przez tkz Nałogowiec (42,020 p.)

Dodaj 

#include <unistd.h>

http://codewiki.wikidot.com/c:system-calls:read Może to jest problemem. 

komentarz 3 stycznia 2020 przez Kamil780 Nowicjusz (120 p.)
przeniesione 3 stycznia 2020 przez Arkadiusz Waluk
Niestety, teraz mam komunikat (nie można otworzyć pliku źródło "unistd.h"). Może zła ścieżka?
komentarz 3 stycznia 2020 przez Kamil780 Nowicjusz (120 p.)

W materiale linku chodzi o to, aby pobrać nagłówek z MinGW i użyć w Visualu jak niżej?

#ifndef _UNISTD_H
#define _UNISTD_H  1
#pragma GCC system_header

#include <_mingw.h>

 

komentarz 3 stycznia 2020 przez tkz Nałogowiec (42,020 p.)
Chodzi o to by zastąpić unistd.h windowsowym odpowiednikiem.

1 odpowiedź

0 głosów
odpowiedź 3 stycznia 2020 przez adrian17 Mentor (353,180 p.)
edycja 3 stycznia 2020 przez adrian17
#include<sys/socket.h>
#include<arpa/inet.h>

Na moje oko, to w ogóle nie było pisane z myślą o Windowsie.

Windows ma header winsock2.h który dostarcza API bardzo zbliżone do socketów POSIXowych, z paroma haczykami, w szczególności obecność WSAStartup/WSACleanup. Powinno dać się dość łatwo poprawić ten kod żeby działał na windowsie z <winsock2.h>, ale trzeba nad tym chwilkę spędzić.

https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-start-page-2

https://docs.microsoft.com/en-us/windows/win32/winsock/getting-started-with-winsock

A konkretnie co do read()/write(): https://stackoverflow.com/a/12608707/2468469 (przy czym AFAIK rada z send/recv odnosi się tak samo do MinGW jak do MSVC)

...ale pewnie prościej byłoby to skompilować i odpalić na Linuxie ;)

komentarz 3 stycznia 2020 przez j23 Mędrzec (195,240 p.)

Dodam jeszcze, by zamienić typ deskryptorów z int na SOCKET, bo w WinAPI deskryptor to uchwyt wielkości wskaźnika, a int w 64-bitowym kodzie będzie 32-bitowy.

Podobne pytania

0 głosów
1 odpowiedź 1,016 wizyt
0 głosów
1 odpowiedź 4,991 wizyt
pytanie zadane 12 listopada 2018 w Sieci komputerowe, internet przez Ubermade Bywalec (2,020 p.)
0 głosów
2 odpowiedzi 591 wizyt

93,376 zapytań

142,377 odpowiedzi

322,517 komentarzy

62,724 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...