У меня есть приложение, написанное на C # .Net (Framework 2.0, если это имеет значение). Он вызывает exe-файл VB6, который предоставляет COM-класс с одним методом - который показывает форму.
Когда форма VB закрыта, я получаю системную ошибку (сообщение Windows): не удалось прочитать местоположение в памяти. Затем Windows спрашивает, нужно ли закрыть приложение или отладить его. Неважно, что я выберу, так как на тестовом компьютере не установлены отладчики, и когда я выбираю отладку, выдается сообщение о том, что его придется закрыть.
Ошибка возникает только при двух условиях (должны применяться оба):
- Когда это выполняется под Windows 2000.
- Кроме того, это происходит только в том случае, если я сначала нажму кнопку «Показать отчет», которая вызывает другую COM DLL - Crystal Reports - для создания отчета.
По сути, поток выглядит так:
C#.Net application
|-- MDI Form
| When clicking a button on the form, the VB6 method is called
+-- showing the form. setParent(VBForm.Handle, DotNetForm.Handle) is called
| and the form is shown. The called method returns (there is no return value)
| |
| +-- When clicking "Display report", crystal reports is used to generate a report and show it to the user
| |
| \-- When Exit button is clicked, form is closed - <b>this is where the error occures</b>
|
\-- .Net form keeps on living long after that inner form is closed
Кто-нибудь знает, что может вызвать такую ошибку? В VB есть строка On Error Goto
, окружающая весь метод Main, который должен отлавливать любые ошибки в VB, но это не так. Ошибка, однако, исходит из сгенерированного VB EXE-файла.