【问题标题】:Can I override _matherr in an C++/CLI dll?我可以在 C++/CLI dll 中覆盖 _matherr 吗?
【发布时间】:2009-09-15 18:48:10
【问题描述】:

我有一个提供自定义 _matherr 处理程序的非托管 c++ 应用程序。当此应用程序在非托管 DLL 中加载和运行代码时,如果出现数学错误(例如 asin(100.0)),则会调用自定义 _matherr 函数并且一切正常。

但是,我现在尝试在 C++/CLI 中创建一个 NUnit 测试 DLL,它加载相同的非托管 DLL 并运行与上述应用程序相同的代码。我想要做的是将 _matherr 函数添加到 C++/CLI dll 中,这样当发生数学错误时,我可以执行一些自定义处理程序逻辑。

使用定义的 _matherr 函数,C++/CLI dll 编译得很好,但是当我从非托管 dll 强制出现数学错误时,_matherr 函数不会被调用。

C++/CLI 不支持吗? MSDN 文档似乎说所有 C 运行时都支持 _matherr,(带有指向包括 /clr 运行时在内的运行时列表的链接。)

【问题讨论】:

    标签: c++-cli


    【解决方案1】:

    我的经验是,如果在 dll 中定义 _matherr 将不起作用。它必须在可执行文件中定义。

    我什至见过编译器,当您尝试在 dll 中添加 _matherr 时,它们不会链接它,因为他们看不到任何人对其进行引用。

    【讨论】:

      【解决方案2】:

      也许您需要类似代理 dll 之类的东西,将每个函数调用传递给原始 dll,但您希望额外处理的除外。

      【讨论】: