Mentoss Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 Przy próbie kompilacji (w Code::Blocks) 39dll otrzymuję całe masy errorów. Co zrobić, żeby było można używać funkcji 39dll w programie napisanym w C++ ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 A jakie błędy wyskakują... z kryształowej kuli mam je wytrzasnąć?... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Shockah Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 39dll w C++ nie ma sensu, chyba że piszesz np. sam serwer, a grę masz w GMie. Nie opłaca się przez użycie double'i i pcharów (czy co to było). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 39dll w C++ nie ma sensu, chyba że piszesz np. sam serwer, a grę masz w GMie. Nie opłaca się przez użycie double'i i pcharów (czy co to było). Nie zaglądałeś w źródła 39DLL... prawda? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 Przecież jest 39dll dla c++ wystarczy poszukać. EDIT:http://s9.zetaboards.com/Ultimate3D_commun...opic/7245619/1/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 Przecież jest 39dll dla c++ wystarczy poszukać. EDIT:http://s9.zetaboards.com/Ultimate3D_commun...opic/7245619/1/ Wystarczyło ściągnąć 39DLL wraz z DLLem pod GMa, 39ster udostępnił źródła... Wystarczy trochę zredukować 'source files' i można działać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 1 Października 2011 Autor Udostępnij Opublikowano 1 Października 2011 @Konrad D:\CBPROJECTS\srvapp\buffer.h|3|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CBuffer'| D:\CBPROJECTS\srvapp\tools.h|7|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CTools'| D:\CBPROJECTS\srvapp\socket.h|5|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CSocket'| D:\CBPROJECTS\srvapp\list.h|3|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'CList'| D:\CBPROJECTS\srvapp\39dll.cpp|9|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'buffers'| D:\CBPROJECTS\srvapp\39dll.cpp|10|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'sockets'| D:\CBPROJECTS\srvapp\39dll.cpp|11|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'files'| D:\CBPROJECTS\srvapp\39dll.cpp|12|error: expected ')' before '*' token| D:\CBPROJECTS\srvapp\39dll.cpp|13|error: expected ')' before '*' token| D:\CBPROJECTS\srvapp\39dll.cpp|16|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|25|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|34|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|43|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|50|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|59|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|66|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|74|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|85|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|100|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|116|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|123|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|128|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|133|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|140|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|149|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|156|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|161|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|166|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|172|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|178|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|184|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|191|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|197|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|203|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|209|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|215|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|221|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|227|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|233|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|239|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|246|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|253|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|260|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|267|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|274|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|280|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|286|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|292|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|299|error: expected identifier or '(' before string constant| D:\CBPROJECTS\srvapp\39dll.cpp|306|error: expected identifier or '(' before string constant| ||More errors follow but not being shown.| ||Edit the max errors limit in compiler options...| ||=== Build finished: 50 errors, 0 warnings ===| Zaglądałem w źródła, ale chcę tylko możliwość użycia funkcji tak, jak w GMie. Nie jestem żadnym ekspertem c++. @Shocker: Taki właśnie jest plan. Serwer osobno (c++), gra osobno (GM). @Edie: Kod źródłowy jest w paczce z 39dll. Kłopot w tym, że nie da się go skompilować. Przynajmniej w Code::Block -sie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 wyglada, jakby naglowki wymienionych klas nie byly zaincludowane w danym cpp Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 1 Października 2011 Udostępnij Opublikowano 1 Października 2011 A jak to w ogóle składasz? Wystarczy że dodasz do źródeł serwera ów pliki (*.cpp i *.h). Oprócz 'main.cpp', gdyż zawiera eksporty dla GMa. Nie zapomnij o nagłówkach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 2 Października 2011 Autor Udostępnij Opublikowano 2 Października 2011 Bawiłem się tym, kombinowałem... do source'ów dorzuciłem wszystkie *.cpp i *.h z wyjątkiem main.cpp, tak jak pisałeś, Konrad. W pliku głównym dałem #include i wszystkie załączone *.cpp po kolei. I nie wywala błędów. Złożę jakiś test i zobaczę, czy działa. Dzięki wielkie! Edit: Nie wywala errorów, jeśli próbuję zaincludować nieistniejący includes.cpp. W przeciwnym wypadku: Compiling: main.cpp In file included from D:\CBPROJECTS\srvapp\main.cpp:3: D:\CBPROJECTS\srvapp\socket.cpp: In member function 'bool CSocket::tcpconnect(char*, int, int)': D:\CBPROJECTS\srvapp\socket.cpp:8: warning: comparison between signed and unsigned integer expressions D:\CBPROJECTS\srvapp\socket.cpp: In member function 'bool CSocket::udpconnect(int, int)': D:\CBPROJECTS\srvapp\socket.cpp:117: warning: comparison between signed and unsigned integer expressions Linking console executable: bin\Debug\srvapp.exe obj\Debug\main.o: In function `CList': D:/CBPROJECTS/srvapp/list.cpp:2: multiple definition of `CList::CList()' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:2: first defined here obj\Debug\main.o: In function `CList': D:/CBPROJECTS/srvapp/list.cpp:2: multiple definition of `CList::CList()' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:2: first defined here obj\Debug\main.o: In function `CList': D:/CBPROJECTS/srvapp/list.cpp:9: multiple definition of `CList::CList(int)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:9: first defined here obj\Debug\main.o: In function `CList': D:/CBPROJECTS/srvapp/list.cpp:9: multiple definition of `CList::CList(int)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:9: first defined here obj\Debug\main.o: In function `~CList': D:/CBPROJECTS/srvapp/list.cpp:16: multiple definition of `CList::~CList()' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:16: first defined here obj\Debug\main.o: In function `~CList': D:/CBPROJECTS/srvapp/list.cpp:16: multiple definition of `CList::~CList()' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:16: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:21: multiple definition of `CList::Add(void*)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:21: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:33: multiple definition of `CList::Remove(void*)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:33: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:46: multiple definition of `CList::Remove(int)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:46: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:55: multiple definition of `CList::set(int, void*)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:55: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:60: multiple definition of `CList::Clear()' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:60: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:67: multiple definition of `CList::find(void*)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:67: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:73: multiple definition of `CList::operator[](int)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:73: first defined here obj\Debug\main.o:D:/CBPROJECTS/srvapp/list.cpp:79: multiple definition of `CList::item(int)' obj\Debug\list.o:D:/CBPROJECTS/srvapp/list.cpp:79: first defined here obj\Debug\md5.o: In function `Z7MD5InitP7MD5_CTXm': D:/CBPROJECTS/srvapp/md5.cpp:196: multiple definition of `MD5Init(MD5_CTX*, unsigned long)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:196: first defined here obj\Debug\md5.o: In function `Z9MD5UpdateP7MD5_CTXPhj': D:/CBPROJECTS/srvapp/md5.cpp:207: multiple definition of `MD5Update(MD5_CTX*, unsigned char*, unsigned int)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:207: first defined here obj\Debug\md5.o: In function `Z8MD5FinalP7MD5_CTX': D:/CBPROJECTS/srvapp/md5.cpp:239: multiple definition of `MD5Final(MD5_CTX*)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:239: first defined here obj\Debug\md5.o: In function `Z12CalculateMD5PciS_': D:/CBPROJECTS/srvapp/md5.cpp:273: multiple definition of `CalculateMD5(char*, int, char*)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/md5.cpp:273: first defined here obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:5: multiple definition of `CSocket::tcpconnect(char*, int, int)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:5: first defined here obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:32: multiple definition of `CSocket::tcplisten(int, int, int)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:32: first defined here obj\Debug\socket.o: In function `CSocket': D:/CBPROJECTS/srvapp/socket.cpp:52: multiple definition of `CSocket::CSocket(unsigned int)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:52: first defined here obj\Debug\socket.o: In function `CSocket': D:/CBPROJECTS/srvapp/socket.cpp:52: multiple definition of `CSocket::CSocket(unsigned int)' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:52: first defined here obj\Debug\socket.o: In function `CSocket': D:/CBPROJECTS/srvapp/socket.cpp:58: multiple definition of `CSocket::CSocket()' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:58: first defined here obj\Debug\socket.o: In function `CSocket': D:/CBPROJECTS/srvapp/socket.cpp:58: multiple definition of `CSocket::CSocket()' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:58: first defined here obj\Debug\socket.o: In function `~CSocket': D:/CBPROJECTS/srvapp/socket.cpp:66: multiple definition of `CSocket::~CSocket()' obj\Debug\main.o:D:/CBPROJECTS/srvapp/socket.cpp:66: first defined here Process terminated with status 1 (0 minutes, 2 seconds) 50 errors, 2 warnings Chyba, że zgodnie z oryginałem i przykładem includuję pliki *.h: Linking console executable: bin\Debug\srvapp.exe obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:8: undefined reference to `socket@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:10: undefined reference to `gethostbyname@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:12: undefined reference to `closesocket@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:17: undefined reference to `htons@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:19: undefined reference to `connect@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:21: undefined reference to `WSAGetLastError@0' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:23: undefined reference to `closesocket@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:33: undefined reference to `socket@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:37: undefined reference to `htons@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:39: undefined reference to `bind@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:41: undefined reference to `closesocket@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:44: undefined reference to `listen@8' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:46: undefined reference to `closesocket@4' obj\Debug\socket.o: In function `~CSocket': D:/CBPROJECTS/srvapp/socket.cpp:69: undefined reference to `shutdown@8' D:/CBPROJECTS/srvapp/socket.cpp:70: undefined reference to `closesocket@4' D:/CBPROJECTS/srvapp/socket.cpp:69: undefined reference to `shutdown@8' D:/CBPROJECTS/srvapp/socket.cpp:70: undefined reference to `closesocket@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:76: undefined reference to `accept@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:88: undefined reference to `getpeername@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:89: undefined reference to `inet_ntoa@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:95: undefined reference to `setsockopt@20' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:102: undefined reference to `recv@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:103: undefined reference to `WSAGetLastError@0' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:111: undefined reference to `ioctlsocket@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:117: undefined reference to `socket@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:121: undefined reference to `htons@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:123: undefined reference to `bind@12' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:125: undefined reference to `closesocket@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:142: undefined reference to `htons@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:143: undefined reference to `inet_addr@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:144: undefined reference to `sendto@24' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:154: undefined reference to `send@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:160: undefined reference to `send@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:162: undefined reference to `send@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:164: undefined reference to `WSAGetLastError@0' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:171: undefined reference to `recv@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:180: undefined reference to `recv@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:194: undefined reference to `recvfrom@24' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:201: undefined reference to `recv@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:203: undefined reference to `recv@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:214: undefined reference to `recv@16' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:231: undefined reference to `recvfrom@24' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:245: undefined reference to `WSAGetLastError@0' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:252: undefined reference to `gethostbyname@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:254: undefined reference to `inet_ntoa@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:259: undefined reference to `inet_ntoa@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:264: undefined reference to `ntohs@4' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:278: undefined reference to `WSACleanup@0' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:284: undefined reference to `WSAStartup@8' obj\Debug\socket.o:D:/CBPROJECTS/srvapp/socket.cpp:291: undefined reference to `gethostname@8' Process terminated with status 1 (0 minutes, 0 seconds) 50 errors, 0 warnings Ciekawe jest to, że w przykładzie podrzuconym przez Ediego jest to samo. Nawet, jeśli nic nie zmieniam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Pisząc najprościej: Kiedy używasz #include preprocessing wkleja całą zawartość z .h do danego cpp. Pliki .h to pliki z deklaracjami a cpp z definicjami danych funkcji, klas itd(teoretycznie) Zgodnie z oryginałem zaincluduj pliki .h W twoim przypadku potrzebujesz jeszcze dorzucić bibliotekę/i(undefined reference wyraźnie to pokazuje). Powinno to być gdzieś w: Project->Build options...->Linker settings Dodaj tam wymagane biblioteki"lib'y". Jeśli masz np np dll o nazwie 39dll.dll szukaj czegoś podobnego np: 39dll.lib czy jeśli są wersje debug: 39dll_d.lib. edit: Musisz jeszcze zapewne dodać ścieżkę, szukaj czegoś jak: Linker settings>>Link Libraries Jak będziesz mieć problem ze znalezieniem poszperaj w necie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 2 Października 2011 Autor Udostępnij Opublikowano 2 Października 2011 Wow! Dodanie bibliotek do build options pomogł○o. Nie ma errorów. Nawet warningów. Serdecznie dziękuję. Stworzę mały serwer, żeby sprawdzić, czy działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 2 Października 2011 Administratorzy Udostępnij Opublikowano 2 Października 2011 Ja nie miałem pod C::B problemów, nawet dopisałem tam dwie funkcje do DLLa które MD5 pliku robiły i cos tam jeszcze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 2 Października 2011 Autor Udostępnij Opublikowano 2 Października 2011 Tak, ale zauważ różnice w poziomie zaawansowania w czymkolwiek pomiędzy Tobą, a mną. Wie ktoś może dlaczego tcpaccept zwraca -1, mimo, że klient dołącza do gry i twierdzi, że jest serwer? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Tak, ale zauważ różnice w poziomie zaawansowania w czymkolwiek pomiędzy Tobą, a mną. Wie ktoś może dlaczego tcpaccept zwraca -1, mimo, że klient dołącza do gry i twierdzi, że jest serwer? Tylko nie pisz, że korzystasz z tych 'exportów dla GMa'... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 2 Października 2011 Autor Udostępnij Opublikowano 2 Października 2011 :D Aż taki głupi nie jestem... 39dll.h z paczki z przykładu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Wie ktoś może dlaczego tcpaccept zwraca -1, mimo, że klient dołącza do gry i twierdzi, że jest serwer? Jest to funkcja, która wywołuje się co jakiś czas. np w jakiejś fixed pętli, która sprawdza czy jakiś client nie chcę się połączyć. Jeśli napiszesz wersje z event'ami działa to na zasadzie pętli komunikatów w winapi. Zapewne zrobiłeś to w standardowy sposób, który opisałem na początku więc -1 oznacza, że żaden client nie chcę się połączyć w danej "chwili". edit: Oczywiście sam system wywoływania co jakiś czas musisz napisać sam. Trzeba też przed tym ustawić socket na nasłuchiwanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 :D Aż taki głupi nie jestem... 39dll.h z paczki z przykładu. Z tego co się orientuję, to tylko ta GMowa funkcja zwraca -1, gdy się nie powiedzie. Natomiast w wersji C++ower zwraca wskaźnik na socket lub 'null'. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Z tego co się orientuję, to tylko ta GMowa funkcja zwraca -1, gdy się nie powiedzie. Natomiast w wersji C++ower zwraca wskaźnik na socket lub 'null'. nope. Poszperaj i sprawdź. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 2 Października 2011 Autor Udostępnij Opublikowano 2 Października 2011 Właśnie kopiowałem kod do posta, gdy znalazłem literówkę. Serwer łapie. Dzięki. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 nope. Poszperaj i sprawdź. Aż zajrzałem do źródeł (: class CSocket { // ... public: // ... CSocket* tcpaccept(int mode); // ... }; CSocket* CSocket::tcpaccept(int mode) { if(sockid<0)return NULL; SOCKET sock2; if((sock2 = accept(sockid, (SOCKADDR *)&SenderAddr, &SenderAddrSize)) != INVALID_SOCKET) { CSocket*sockit = new CSocket(sock2); if(mode >=1)sockit->setsync(1); return sockit; } return NULL; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 2 Października 2011 Autor Udostępnij Opublikowano 2 Października 2011 Mówiłem o zwrocie z tcpaccept: double tcpaccept(double sockid, double mode) { CSocket*sock = (CSocket*)sockets.item((int)sockid); if(sock == NULL)return -1; CSocket*sock2 = sock->tcpaccept((int)mode); if(sock2 != NULL)return AddSocket(sock2); return -1; } Stoi jasno i klarownie " return -1; " Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Aż zajrzałem do źródeł (: Coś słabo zajrzałeś ;) Po pierwsze pokazujesz kod z winsock a ja pisałem o(mea culpa zapomniałem o tym napisać): http://beej.us/guide/bgnet/output/html/sin...net.html#accept Po drugie zerknij dokładnie czym jest typ SOCKET. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Mówiłem o zwrocie z tcpaccept:double tcpaccept(double sockid, double mode) { CSocket*sock = (CSocket*)sockets.item((int)sockid); if(sock == NULL)return -1; CSocket*sock2 = sock->tcpaccept((int)mode); if(sock2 != NULL)return AddSocket(sock2); return -1; } Stoi jasno i klarownie " return -1; " Ale TO jest interface dla GMa, po co się babrać z tym, jeśli masz bardziej przyjazny interface dla C++a. Coś słabo zajrzałeś ;) Po pierwsze pokazujesz kod z winsock a ja pisałem o(mea culpa zapomniałem o tym napisać): http://beej.us/guide/bgnet/output/html/sin...net.html#accept Po drugie zerknij dokładnie czym jest typ SOCKET. Nie z winsocka, lecz ze źródła 39DLLa, dokładniej jest to obiektowy interface ów liba. Co do typu SOCKET, w tym wypadku metoda CSocket::tcpaccept zwraca wskaźnik na obiekt typu CSocket, obdarzony metodami (: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 2 Października 2011 Udostępnij Opublikowano 2 Października 2011 Nie z winsocka, lecz ze źródła 39DLLa, dokładniej jest to obiektowy interface ów liba. Co do typu SOCKET, w tym wypadku metoda CSocket::tcpaccept zwraca wskaźnik na obiekt typu CSocket, obdarzony metodami (: Nie pisałem o jakimś wrapperze, który po prostu bezpośrednio wywołuje funkcje winsock'a. Nie brałem nawet pod uwagę tak wysokiego poziomu. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 3 Października 2011 Autor Udostępnij Opublikowano 3 Października 2011 Jest komunikacja, nawet działająca... Mam jednak taki tyci problem, więc żeby nowego tematu nie zakładać: gracz[i].imie=readstring(0); dlaczego zmienia to wszystkie znane elementy na zawartość otrzymaną od klienta, a nie tylko element i (w pętli for)? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 3 Października 2011 Udostępnij Opublikowano 3 Października 2011 Sockety to nie jest żadna magia, to co zmienisz będzie zmienione tak jak sam to napiszesz. To tylko przesył pakietów a co z nimi zrobisz to już twoja sprawa. Przejrzyj dobrze kod. Jeśli w pętli masz: gracz.imie=readstring(0); to logiczne, że każdy element tablicy a raczej jego member imię będzie miał taką samą zawartość skoro przypisujesz tą samą daną: readstring(0). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 3 Października 2011 Autor Udostępnij Opublikowano 3 Października 2011 Mam w pętli, ale jest to przy odbieraniu wiadomości od gracza. for(i=0;i<5;i++) { if (gracz[i].jest) { while (true) { double msg=receivemessage(gracz[i].sck,0,0); if (msg<0) { break; } else if (msg==0) { // (...) } else { switch(int a=readbyte(0)) { case 0: gracz[i].imie=readstring(0); // (...) Gracz dołącza do serwera, w odpowiedzi otrzymuje bajt zwrotny informujący o numerze gracza (w razie przyjęcia) bądź przepełnienia serwera. Gdy otrzyma bajt przyjęcia wysyła na serwer nazwe gracza. I tu pojawia się błąd - nazwa ta jest przypisywana wszystkim dotychczasowym graczom. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 3 Października 2011 Udostępnij Opublikowano 3 Października 2011 To Ty przypisujesz wszystkim to samo. Jedna opcja jest taka, że po przyjściu paczki sam ustawiasz to dla wszystkich. One same się tak nie ustawią. W każdej paczce daj id czyli sender i na podstawie tego przetwarzaj dane lub zrób bez pętli i sprawdź czy będzie to samo. edit: Zresztą nie wiem jak ten wrapper przetwarza te paczki i trudno mi ocenić czy dobrze to robisz. Sprawdź z tym co napisałem, jak dalej będzie problem napisz checknie się src tego wrapera. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się