更新到Delphi XE后是否调用过程_ftol2_sse?

更新到Delphi XE后是否调用过程_ftol2_sse?,delphi,soap,dll,delphi-xe,Delphi,Soap,Dll,Delphi Xe,在我们的程序中,我们使用web服务将数据从第三方拉回到我们的程序中 自从我们从Delphi 2009更新到Delphi XE之后,Windows server 2003用户在对web服务进行SOAP调用时收到以下错误消息 Server 2003上的msvcrt.dll没有过程_ftol2_sse,由于某些原因,现在正在调用该过程 我知道当我们在Delphi 2009上有源代码时,没有调用这个过程,因为我在Windows server 2003上运行这些构建时没有遇到这个错误 这是否可行?IDE

在我们的程序中,我们使用web服务将数据从第三方拉回到我们的程序中

自从我们从Delphi 2009更新到Delphi XE之后,Windows server 2003用户在对web服务进行SOAP调用时收到以下错误消息

Server 2003上的msvcrt.dll没有过程_ftol2_sse,由于某些原因,现在正在调用该过程

我知道当我们在Delphi 2009上有源代码时,没有调用这个过程,因为我在Windows server 2003上运行这些构建时没有遇到这个错误

这是否可行?IDE中的更改是否会影响正在调用的dll过程?是否有人对我如何跟踪或修复此错误有任何见解或想法


谢谢

这是您就这个主题提出的第三个类似问题。我会给你一些背景信息,帮助你弄清楚到底发生了什么

首先,重要的是要知道msvcrt.dll是一个系统组件。它不是MSVC运行时。它是作为Windows的一部分提供的。回到糟糕的旧时代,在90年代中期,许多开发者认为MSVC6运行时总是可用的。而且他们忽略了将运行时作为程序安装的一部分进行安装。当安装程序偶然发现一台没有MSVC6的机器时,这偶尔会引起麻烦

MSVC团队转而使用不同名称的运行时dll、msvcrt70.dll、msvcrt80.dll等。他们还教育开发人员,安装MSVC运行时应该是所有MSVC应用程序安装程序的一部分

但Windows团队希望帮助那些安装程序假定MSVC6运行时可用的遗留应用程序。因此,他们将MSVC6运行时置于自己的控制之下,并开始将其与Windows一起提供。我认为这大约始于Windows2000或XP时代

我想说的一点是,msvcrt.dll是一个您无法控制的系统dll。在前面的问题中,您已经描述了修改该DLL的尝试。不要那样做

现在,据我所知,2003 server附带的msvcrt.dll版本没有导出名为
\u ftol2\u sse
的函数。这并不奇怪,因为在2003年的服务器时代,SSE浮点还没有广泛使用。很明显,系统中的某些内容导致尝试导入
\u ftol2\u sse

您应该能够通过使用找出引起此问题的原因。使用Profile菜单上的功能启动应用程序并仔细研究日志。您应该能够看到导致尝试链接到
\u ftol2\u sse
的事件链

如果有任何Windows代码链接到msvcrt.dll,我会感到惊讶。该库纯粹是作为链接到MSVC6的遗留应用程序的道具提供的。但你永远不知道

还可以尝试在Dependency Walker中加载可执行文件。请查看导入的DLL列表。检查列表中是否有msvcrt.dll。如果是,请查看可执行文件导入的函数,以及该列表中是否有
\u ftol2\u sse
。如果是这样,那么您将能够在Delphi源代码中找到它

从网络上各种听起来类似的报道中,我怀疑你面临的问题是良性的。许多报告同一问题的人都可以通过对话框,让他们的程序毫无问题地继续。这表明您可以简单地抑制错误报告,从而解决问题。使用该函数可以执行此操作。您希望包括
SEM\u FAILCRITICALERRORS
标志

请注意,
SetErrorMode
有一个相当反常的接口。我见过的几乎所有代码都不正确地使用它。包括DelphiRTL中的代码,以及许多常用的Delphi第三方库。陈雷蒙,像往常一样


切换编译器会引起行为改变吗?当然可以。您正在使用的库代码的实现方式不同。或者,在关键时刻,错误模式可能有所不同。

今天早些时候,您认为这是由XMLDocument引起的。你确定现在是SOAP呼叫吗?我真的很难找到问题的根源。这个错误至少在一些XMLDocument调用之后出现,但是当我注释掉这些行时,错误仍然会出现,直到我注释掉几乎每一行。一旦我认为我已经找到了它发生的那一行,我就把那一行注释掉,把其余的带回来,它仍然出现了。所以它似乎只是在程序中的多个地方发生的。此web服务调用是程序的另一个发生区域。。所以我只是想提一下。我想知道对xe的更改是否会导致这种情况。您知道如何使用调试工具吗?特别是断点和单步执行代码?如果你能找到导致错误的原因,这将对你自己(和我们)有所帮助。是的,我的问题是,我无法在我的开发环境中重现错误,这完全是windows 2003服务器的问题。这看起来对吗?dwMode:=设置错误模式(SEM\U故障临界错误);在这里尝试//容易出错的代码,最后设置ErrorMode(dwMode);结束;你知道我如何在同一个调用中忽略SEM_NOGPFAULTERRORBOX和SEM_FAILCRITICALERRORS吗?我会在启动时这样做:dwMode:=SetErrorMode(SEM_FAILCRITICALERRORS);SetErrorMode(dwMode或SEM_故障临界错误);这有帮助吗?是的,当你调用dwMode:=SetErrorMode(SEM_FAILCRITICALERRORS | SEM_nogpfault terrorbox)?我不知道如何在Delphi中组合这两个。C++是逻辑的。这就是Delphi中的or运算符。使用我之前评论中的代码。SetErrorMode解决了你的问题吗?非常老了,但帮了我一天的忙。谢谢你给我的建议。发现
AVIFIL32.dll
正在导入
VSCRT.dll