2012-07-03 2 views
0

내가 만들고있는 게임에 대해 UDP 연결을 시도하려고합니다. 소켓 입력이 두 번째 스레드를 통해 읽혀 지므로 게임을 계속할 수 있습니다. 메시지를 기다리는 동안 실행 중입니다. 나는 별도의 프로젝트에서 일하고 있어요,하지만 내 게임 코드에 이상 이식 할 때 나는 확인되지 않은 외부 기호 오류 얻을 :이 검색 좀했는데 모두가 런타임 라이브러리가 다중으로 설정해야합니다 말한다해결되지 않은 외부 기호 receiveThread (_beginthread의 엔트리 포인트)

LNK2019: unresolved external symbol "void __cdecl receiveThread(void *)" ([email protected]@[email protected]) referenced in function "public: bool __thiscall Network::setupServerUDP(void)" ([email protected]@@QAE_NXZ)).

을 (MVS 2010에서는 단일 스레드로 설정할 수도 있습니다.)하지만 오류를 해결하지는 않습니다. 어딘가에 잘못 설정된 일부 바보 옵션이라고 확신합니다. 그러나 나는 그것이 무엇인지 생각할 수 없다.

ws2tcpip.h가 포함되어 있으며 올바른 라이브러리 #pragma comment (lib, "Ws2_32.lib")에 연결했습니다.

테스트 프로젝트와 게임 프로젝트 사이의 유일한 차이점은 테스트 프로젝트가 콘솔 응용 프로그램이고 다른 응용 프로그램은 Windows 응용 프로그램이라는 것입니다. 그러나 왜 이것이 문제인지는 알 수 없습니다. 생각?

도움 주셔서 감사합니다.

건배,

맥심

+0

나는'receiveThread()'를 인식하지 못합니다. 당신의 기능 중 하나입니까? – hmjd

+1

제목이 "Unresolved (...) _beginthread"이지만 "unresolved (...) receiveThread"라는 텍스트가 나오는 이유는 무엇입니까? – RedX

+0

예, 스레드에 사용하는 기능입니다. setupServerUDP는 소켓과 모든 것을 설정하는 함수이며 _beginthread (receiveThread, 0, & params)를 호출합니다. (params는 소켓 핸드 켈과 클라이언트 목록을 스레드에 가져 오는 데 사용되는 구조체입니다). –

답변

1

해결되지 않은 함수는이 receiveThread있어, _beginthread 없습니다. 그것이 당신의 기능입니다 - 당신이 _beginthread에 대한 매개 변수로 제공하는 스레드 진입 점. 올바른 호출 규칙 인 을 작성 했습니까? 정말 cdecl입니까? cdecl로 선언했지만 명시 적 호출 규칙을 구현하지 않으면 이와 같은 링크 오류가 발생합니다. 예를 들어,이 코드는 링크 오류가 발생합니다 :

extern "C" { void receiveThread(void*); } //There's a cdecl function somewhere 

//... 

_beginthread(receiveThread, 0, 0); //Let's refer to it 

//... 

void receiveThread(void *p) //But this is not it! It's stdcall. 
{ 
    //Do something 
} 

해결하려면 receiveThread의 구현이 cdecl 규칙 규칙을 사용하거나 extern "C"로 선언되어 있는지 확인하십시오.

_beginthreadex은 cdecl이 아닌 stdcall 기능을 필요로합니다. _beginthreadex을 사용하면 규칙에 대해 걱정할 필요가 없습니다. > 추가 종속성 -

+0

감사합니다 ^^ 그게 전부였습니다. beginthreadex를 사용하도록 변경했습니다. :삼 –

0

오류는 링커가 나는

Ws2_32.lib는 구현이 포함 된 경우 WS2TCPIP.H

에 선언 같은데요 기능 receiveThread에 대한 구현을 찾을 수 없음을 말하고, 링커에 추가 시도 -> 프로젝트의 속성 메뉴에서 입력하십시오.

관련 문제