我有一个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