我最近遇到了一个问题,当我将一个代码添加到一个由dll使用的lib时,无法加载dll。我得到一个异常“在xxx浮点无效操作”。当我注释掉它的代码时它起作用。添加的代码就像创建TADOQuery对象,添加sql语句和参数,然后执行打开,检查值等一样直接。没有什么可疑的。现在,当我取消注释代码并在其他地方注释另一个代码时,它开始工作。显然,新添加的代码只会绊倒其他地方引发的问题。
现在,在调用LoadLibrary()
调用时会发生此错误。没有附加代码。 DllMain
只返回1.发生这种情况时,汇编代码始终位于FSTP tbyte ptr
System::Variant::Clear()
。
有人遇到过这样的问题吗?任何有关如何调试的提示也表示赞赏。
PS:它也可能是Embarcadero的编译器问题。我最近发现,为分配和比较的组合生成的程序集是不正确的。这里唯一的怀疑是dll使用的lib很大。当我清理并构建lib时,总行数为5.7米。也许有一些大型库的设置?IDE-XE4,c ++ builder OS-Win 7
谢谢, 马修乔伊
答案 0 :(得分:1)
C ++ Builder和Delphi有不同的默认FPU设置,比如MSVC和写在其中的DLL。
它可能是这样的:在DllMain
之后,某些异常被屏蔽以隐藏。但是在C ++ Builder代码中的第一个浮点运算发生之前,该异常将被取消屏蔽并发生异常。
这是C ++ Builder / Delphi浮点和DLL的已知问题。