05 10月 2007

BCB 更新Indy元件後 產生的問題

我前一陣子將BCB6的Indy更新至9.0版,結果最近寫程式時,用TClientSocket & TServerSocket的時候卻出現了compile error! 奇怪,之前更新完之後,用Indy的網路元件一點問題也沒有,怎麼現在用舊有的BCB網路元件卻給我出現錯誤訊息咧...
[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'
....

後來google一下後,找到不少解法,但是只有一種解法能成功...
  • 將 Winsock.h 改名爲Winsock1.h
  • 將 Winsock2.h 拷貝一份並改名爲 WinSock.h
保證解决!!

不過這個方法有個後遺症...當之後再使用Indy9.0的網路元件時,當有hpp裡面#include <winsock2.h>時,就得將它改成#include <winsock.h>才行

沒有留言: