Могу ли я переопределить _matherr в DLL C ++ / CLI? - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть неуправляемое приложение c ++, которое предоставляет собственный обработчик _matherr. Когда это приложение загружает и запускает код в неуправляемых библиотеках DLL, при наличии ошибки Math (например, asin (100.0)) вызывается пользовательская функция _matherr, и все работает.

Однако сейчас я пытаюсь создать DLL-библиотеку NUnit Test в C ++ / CLI, которая загружает ту же неуправляемую DLL и выполняет тот же код, что и приложение, описанное выше. Я хочу добавить функцию _matherr в dll C ++ / CLI, чтобы при возникновении математических ошибок я мог выполнять некоторую пользовательскую логику обработчика.

DLL-библиотека C ++ / CLI прекрасно компилируется с определенной функцией _matherr, но когда я запускаю математическую ошибку из неуправляемой библиотеки DLL, функция _matherr не вызывается.

Разве это не поддерживается C ++ / CLI? В документации MSDN написано, что _matherr поддерживается всеми средами выполнения C (со ссылкой на список сред выполнения, включая время выполнения / clr.)

Ответы [ 2 ]

3 голосов
/ 16 июля 2010

Мой опыт показывает, что определение _matherr не работает, если выполняется в dll. Он должен быть определен в исполняемом файле.

Я даже видел компиляторы, которые, когда вы пытаетесь добавить _matherr в dll, не будут связывать его, потому что они не видят, что кто-то ссылается на него.

0 голосов
/ 15 сентября 2009

Возможно, вам нужно что-то вроде прокси-библиотеки DLL, проходящей через каждый вызов функции к исходной библиотеке DLL, за исключением тех, которые вы хотите обработать дополнительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...