加载 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 的一个已知问题。