Visual Studio 2013 浮点支持修复?

Visual Studio 2013 Floating Point Support fix?

我有一个DLL,是商业软件,所以我不能在这里显示代码...

我收到错误“6002”- 浮点支持未加载,但仅在某些应用程序上加载。

这个 dll 挂钩到几个应用程序,没有问题。 我尝试了在 Google 上找到的所有内容,例如重新安装 VC++、清理 PC、注册表等等。

所以我的结论是,在 Visual Studio (2010) 的另一个版本中编译了另一个 dll,它与我的 dll 有某种冲突?! 或者,我有一些内存泄漏,我找不到。 我在我的 DLL 中使用了以下函数(我认为)是问题所在:

sscanf(); // DISABLED IT FOR TEST, BUT STILL GET ERROR
fprintf_s();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DisableThreadLibraryCalls(hModule);
DetourRestoreAfterWith();
_beginthreadex();
strtoul();

我用于日志记录的示例函数:

void ##SOFTWARE-CLASS##::write_log(char *text)
{

    FILE *write_log;        
    char dateStr [9];
    char timeStr [9];
    _strdate( dateStr);
    _strtime( timeStr );

    write_log = fopen("##SOFTWARE-FILE##","a+");
    fprintf_s(write_log,"[%s %s] %s \n", dateStr, timeStr, text);
    fclose(write_log);
}

没有使用其他可能导致浮动错误的东西... dll 已正确连接,我没有警告,也没有错误。 我必须提到,我创建了一个空的 DLL,带有 MessageBox,在第一个 运行,我遇到了同样的错误,但是在切换到 /fp:strict 之后,错误消失。所以我对我的项目做了同样的事情,但错误仍然存​​在。我什至重新编码了整个项目,只是为了看看它是否解决了问题,但没有。 请告诉我如何解决这个问题,因为这是我测试的第三天...

来自 MSDN : R6002 的文档说程序只会在需要时加载浮点支持。这意味着绕行代码被注入到没有初始化浮点子系统的二进制文件中。解决方案是在不需要浮点代码的情况下重新链接您的商业产品,或者重新链接到另一个浮点库。

您可以尝试检测缺少的初始化并自行执行,但这会对注入的系统产生更大的影响,并可能造成不稳定。

对失败的可执行文件使用调试器,您应该能够获得识别失败发生位置的调用堆栈。