我在Delphi2009项目中遇到了一个问题:它不能初始化Indy 10!这段代码以前在Delphi 2007中运行得很好(虽然我们可能使用了Indy的旧版本,但我怀疑这与它没有太大关系);
最初调用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,所以在这里。
有人知道为什么这段代码以前(在Delphi2007中)运行良好,现在(在Delphi2009中)突然崩溃了吗?
这是不能重新打开ws2_32动态链接库的常识,还是真的有什么问题?(我确实检查过:我的系统上只有1个版本的这些DLL)。
更好的是:有人能帮我解决这个问题吗?
发布于 2008-11-04 13:55:28
我终于找到了答案:受影响的应用程序包含一些代码挂钩,这些代码挂钩随机损坏了System.dcu的各个部分!(仅供参考:我们使用的是madshi的madCodeHook库的Delphi2009beta版本)。一旦我们切换到另一个代码挂钩库,这些症状就消失了……我猜这就是你使用测试版软件时会发生的事情。不管怎样,很抱歉为这个麻烦你。问题解决了!
发布于 2008-10-16 00:56:09
这可能过于简单了,但是您是否尝试过更改uses子句中列出相关单元的顺序?有时,这在这些情况下会有所帮助。
发布于 2008-10-17 08:37:23
我认为这可能是Win32接口(包括WinSock接口)的Ansi/Unicode调用的问题。检查代码是否使用AnsiString/AnsiPchar调用XxxA函数(例如MessageBoxA),以及String/Pchar调用xxW函数(例如MessageBoxW)。在以前的版本中,字符串是AnsiString和XxxA的别名,使用的是Win函数,但现在字符串默认是unicode,应该使用XxxW函数。
https://stackoverflow.com/questions/204164
复制相似问题