首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Indy 10不能初始化?

为什么Indy 10不能初始化?
EN

Stack Overflow用户
提问于 2008-10-15 09:33:14
回答 3查看 1.2K关注 0票数 1

我在Delphi2009项目中遇到了一个问题:它不能初始化Indy 10!这段代码以前在Delphi 2007中运行得很好(虽然我们可能使用了Indy的旧版本,但我怀疑这与它没有太大关系);

最初调用IdWinsock2.InitializeWinSock()时,会引发此异常(错误代码为998):

代码语言:javascript
复制
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中,包含以下版本详细信息:

代码语言:javascript
复制
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)。

更好的是:有人能帮我解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-04 13:55:28

我终于找到了答案:受影响的应用程序包含一些代码挂钩,这些代码挂钩随机损坏了System.dcu的各个部分!(仅供参考:我们使用的是madshi的madCodeHook库的Delphi2009beta版本)。一旦我们切换到另一个代码挂钩库,这些症状就消失了……我猜这就是你使用测试版软件时会发生的事情。不管怎样,很抱歉为这个麻烦你。问题解决了!

票数 2
EN

Stack Overflow用户

发布于 2008-10-16 00:56:09

这可能过于简单了,但是您是否尝试过更改uses子句中列出相关单元的顺序?有时,这在这些情况下会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2008-10-17 08:37:23

我认为这可能是Win32接口(包括WinSock接口)的Ansi/Unicode调用的问题。检查代码是否使用AnsiString/AnsiPchar调用XxxA函数(例如MessageBoxA),以及String/Pchar调用xxW函数(例如MessageBoxW)。在以前的版本中,字符串是AnsiString和XxxA的别名,使用的是Win函数,但现在字符串默认是unicode,应该使用XxxW函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/204164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档