我有一个非托管c ++应用程序,它提供了一个自定义_matherr处理程序。当此应用程序加载并运行非托管DLL中的代码时,如果存在Math错误(例如asin(100.0)),则会调用custom _matherr函数并且一切正常。
但是,我现在正在尝试在C ++ / CLI中创建一个NUnit Test DLL,它加载相同的非托管DLL并运行与上面的应用程序相同的代码。我想要做的是将_matherr函数添加到C ++ / CLI dll,这样当出现数学错误时,我可以执行一些自定义处理程序逻辑。
C ++ / CLI dll使用定义的_matherr函数编译得很好,但是当我从非托管dll强制数学错误时,不会调用_matherr函数。
C ++ / CLI不支持此功能吗? MSDN文档似乎说所有C运行时都支持_matherr(带有包含/ clr运行时的运行时列表的链接。)
答案 0 :(得分:3)
我的经验是,如果在dll中完成,定义_matherr不起作用。它必须在可执行文件中定义。
我甚至看到编译器,当你试图在一个dll中添加_matherr时,不会将它链接起来,因为他们没有看到任何人引用它。
答案 1 :(得分:0)
也许你需要像代理dll这样的东西,将每个函数调用传递给原来的dll,除了你想要额外处理的那些。