使用 Indy 元件時,有時候會遇到元件引用的問題,在 Winsock1 和 Winsock2 的Header 裡,有不少是相同名字的宣告,而
發生時的錯誤訊息如下:
[C++ Error] winsock2.h(113): E2238 Multiple declaration for ‘fd_set’
[C++ Error] winsock.h(55): E2344 Earlier declaration of ‘fd_set’
[C++ Error] winsock2.h(116): E2146 Need an identifier to declare
[C++ Error] winsock2.h(157): E2238 Multiple declaration for ‘timeval’
[C++ Error] winsock.h(98): E2344 Earlier declaration of ‘timeval’
[C++ Error] winsock2.h(213): E2238 Multiple declaration for ‘hostent’
[C++ Error] winsock.h(154): E2344 Earlier declaration of ‘hostent’
[C++ Error] winsock2.h(226): E2238 Multiple declaration for ‘netent’
[C++ Error] winsock.h(167): E2344 Earlier declaration of ‘netent’
[C++ Error] winsock2.h(233): E2238 Multiple declaration for ‘servent’
[C++ Error] winsock.h(174): E2344 Earlier declaration of ‘servent’
[C++ Error] winsock2.h(245): E2238 Multiple declaration for ‘protoent’
[C++ Error] winsock.h(186): E2344 Earlier declaration of ‘protoent’
[C++ Error] winsock2.h(401): E2238 Multiple declaration for ‘sockaddr_in’
[C++ Error] winsock.h(322): E2344 Earlier declaration of ‘sockaddr_in’
[C++ Error] winsock2.h(411): E2238 Multiple declaration for ‘WSAData’
[C++ Error] winsock.h(332): E2344 Earlier declaration of ‘WSAData’
[C++ Error] winsock2.h(427): E2146 Need an identifier to declare
[C++ Error] winsock2.h(562): E2238 Multiple declaration for ‘sockaddr’
[C++ Error] winsock.h(495): E2344 Earlier declaration of ‘sockaddr’
[C++ Error] winsock2.h(602): E2238 Multiple declaration for ‘sockproto’
[C++ Error] winsock.h(504): E2344 Earlier declaration of ‘sockproto’
[C++ Error] winsock2.h(641): E2238 Multiple declaration for ‘linger’
[C++ Error] winsock.h(541): E2344 Earlier declaration of ‘linger’
[C++ Error] ws2tcpip.h(29): E2238 Multiple declaration for ‘ip_mreq’
[C++ Error] ws2tcpip.h(29): E2228 Too many error or warning messages
當發生這些錯誤訊息(winsock 的 Multiple declaration )時,請嘗試以下的步驟。
BCB 6 中按「Project/Options」,點選「Directories/Conditionals」,在「Conditional defines」欄位中加入
「_WINSOCKAPI_」字串(如果己經有其他的定義,請放前面,並以分號隔開),最後按「OK」,然後重新編譯