我有一個Delphi 2009項目的問題:它無法初始化Indy 10! 這段代碼在Delphi 2007之前工作得很好(雖然我們可能已經使用了Indy的舊版本,但我懷疑這跟它沒有多大關係);爲什麼不能Indy 10初始化?
到IdWinsock2.InitializeWinSock()發起呼叫,引發此異常(錯誤代碼998):
Project EAServer.exe raised exception class EIdWinsockStubError with message
'Error on loading Winsock2 library (WS2\_32.DLL): Invalid access to memory location'.
但在ws2_32.dll是在C:\ Windows \ System32下好吧,這些版本的詳細信息:
File Version : 5.1.2600.5512 (xpsp.080413-0852)
Description : Windows Socket 2.0 32-Bit DLL
Copyright : © Microsoft Corporation. All rights reserved.
(這表明我在WinXP的btw)。
愚蠢的是,當我看着進程本身(使用「Process Explorer」)時,我可以看到進程已經打開了這個DLL。 「WS2_32.DLL」已加載的原因似乎是因爲我們在該項目中也使用了RTL單元Winsock.pas。 本機靜態鏈接到「wsock32.dll」,它對WS2_32.DLL有依賴性,所以在那裏。
有沒有人知道爲什麼此代碼之前工作正常(在德爾福2007年),現在(德爾福2009年)它突然中斷?
這是無法重新打開ws2_32 DLL的常識,或者這裏真的有什麼問題嗎? (我沒有檢查:我的系統上只有這些DLL的一個版本)。
更棒的是:任何人都可以幫我解決這個問題嗎?
當你在Indy的這些行上跳過時,你運行過ProcMon還是FileMon? 你能寫一個簡短的簡單程序來最小程度地重現問題嗎? 所有機器或只有一臺機器上是否出現同樣的問題? – 2008-10-15 18:32:05