加载 dll 时浮点运算无效
Invalid floating point operation while loading dll
我最近遇到一个问题,当我将代码添加到一个库中,该库被一个dll使用时,dll无法加载。我得到一个异常 "Floating point invalid operation at xxx"。当我注释掉它的代码时。添加的代码就像创建 TADOQuery 对象一样简单明了,添加 sql 语句和参数,然后执行打开、检查值等操作。没什么可疑的。现在,当我取消注释代码并在其他地方注释该单元中的另一块代码时,它开始工作了。所以很明显,新添加的代码只是解决了其他地方引起的问题。
现在调用 LoadLibrary()
调用时会发生此错误。没有附加代码。 DllMain
,只有一个 return 1。发生这种情况时,汇编代码总是在 FSTP tbyte ptr
执行 System::Variant::Clear()
。
有人遇到过这样的问题吗?还感谢有关如何调试的任何提示。
PS:也可能是Embarcadero的编译器问题。我最近发现为赋值和比较的组合生成的程序集是不正确的。这里唯一的怀疑是 dll 使用的库很大。当我清理并构建库时,总行数显示 5.7m。也许有一些大型库的设置?
IDE-XE4,C++ 生成器
OS-Win 7
谢谢,
马修·乔伊
C++Builder 和 Delphi 的默认 FPU 设置不同于 MSVC 和其中编写的 DLL。
大概是这样的:在DllMain
之后,某些异常被屏蔽掉了。但在 C++Builder 代码中的第一个浮点运算发生之前,该异常被揭露并发生异常。
这是 C++Builder/Delphi 浮点数和 DLL 的一个已知问题。
我最近遇到一个问题,当我将代码添加到一个库中,该库被一个dll使用时,dll无法加载。我得到一个异常 "Floating point invalid operation at xxx"。当我注释掉它的代码时。添加的代码就像创建 TADOQuery 对象一样简单明了,添加 sql 语句和参数,然后执行打开、检查值等操作。没什么可疑的。现在,当我取消注释代码并在其他地方注释该单元中的另一块代码时,它开始工作了。所以很明显,新添加的代码只是解决了其他地方引起的问题。
现在调用 LoadLibrary()
调用时会发生此错误。没有附加代码。 DllMain
,只有一个 return 1。发生这种情况时,汇编代码总是在 FSTP tbyte ptr
执行 System::Variant::Clear()
。
有人遇到过这样的问题吗?还感谢有关如何调试的任何提示。
PS:也可能是Embarcadero的编译器问题。我最近发现为赋值和比较的组合生成的程序集是不正确的。这里唯一的怀疑是 dll 使用的库很大。当我清理并构建库时,总行数显示 5.7m。也许有一些大型库的设置?
IDE-XE4,C++ 生成器 OS-Win 7
谢谢, 马修·乔伊
C++Builder 和 Delphi 的默认 FPU 设置不同于 MSVC 和其中编写的 DLL。
大概是这样的:在DllMain
之后,某些异常被屏蔽掉了。但在 C++Builder 代码中的第一个浮点运算发生之前,该异常被揭露并发生异常。
这是 C++Builder/Delphi 浮点数和 DLL 的一个已知问题。