E
evan
Здравствуйте.
В общем, стоит такая задача: создать систему автоматического тестирования для некоей сложной функции, находящейся в Win32 unmanaged DLL. Система тестирования должна вызывать эту функцию много раз с разными входными данными, сохраняя результат вызова в логах. Исходников DLL нет (имеет место нечто вроде аутсорсинговой разработки).
Для решения задачи решено сделать на c# два модуля: маленький консольный wrapper принимает во входных параметрах примерно то же самое, что надо передать в функцию, делает LoadLibrary/GetProcAddress, вызывает функцию, и результаты через сокет передает второму модулю, который рисует GUI и ведет логи. Если wrapper умирает, второй модуль отмечает этот факт в логах, перезапускает wrapper и продолжает тестирование. Исключения, которые выбрасываются из DLLки, ловятся в try/catch во wrapper'е, и пишутся в логи.
Теперь собственно проблема: в DLLке могут быть ошибки выделения памяти и другие неприятные вещи, которые в этом дотнетовском wrapper'е кончаются тем, что try/catch никаких исключений не видит, но после завершения функции main() вдруг вываливается исключение, сообщение о котором выводится, как положено, в MessageBox'е. Вот этот эффект (вывод MessageBox с сообщением об ошибке) необходимо побороть, т.е. сделать так, чтобы процесс просто молча умирал. Можно также скрыть и консоль wrapper'а, но это не обязательно. Добиваться этого можно как модификацией самого wrapper'а, так и запускающего его модуля.
Приветствуются идеи любой степени смутности
В общем, стоит такая задача: создать систему автоматического тестирования для некоей сложной функции, находящейся в Win32 unmanaged DLL. Система тестирования должна вызывать эту функцию много раз с разными входными данными, сохраняя результат вызова в логах. Исходников DLL нет (имеет место нечто вроде аутсорсинговой разработки).
Для решения задачи решено сделать на c# два модуля: маленький консольный wrapper принимает во входных параметрах примерно то же самое, что надо передать в функцию, делает LoadLibrary/GetProcAddress, вызывает функцию, и результаты через сокет передает второму модулю, который рисует GUI и ведет логи. Если wrapper умирает, второй модуль отмечает этот факт в логах, перезапускает wrapper и продолжает тестирование. Исключения, которые выбрасываются из DLLки, ловятся в try/catch во wrapper'е, и пишутся в логи.
Теперь собственно проблема: в DLLке могут быть ошибки выделения памяти и другие неприятные вещи, которые в этом дотнетовском wrapper'е кончаются тем, что try/catch никаких исключений не видит, но после завершения функции main() вдруг вываливается исключение, сообщение о котором выводится, как положено, в MessageBox'е. Вот этот эффект (вывод MessageBox с сообщением об ошибке) необходимо побороть, т.е. сделать так, чтобы процесс просто молча умирал. Можно также скрыть и консоль wrapper'а, но это не обязательно. Добиваться этого можно как модификацией самого wrapper'а, так и запускающего его модуля.
Приветствуются идеи любой степени смутности