Приложение Vb6 работает в IDE, но исполняемый файл вылетает - PullRequest
5 голосов
/ 06 августа 2009

У меня небольшая проблема с проектом Visual Basic 6. Все отлично работает в IDE но исполняемый файл вылетает каждый раз, когда я запускаю приложение. Приложение использует обратные вызовы для связи с C ++ DLL. Даже такой простой код, как отображение окна сообщения, не срабатывает при запуске обратного вызова.

Я изменил режим компиляции на P-код, но проблема не исчезла

Любая помощь будет признательна.

Спасибо всем

Ответы [ 4 ]

3 голосов
/ 08 августа 2009

Похоже, что обратные вызовы могут происходить в другом потоке, чем выполняется в вашем приложении. [ РЕДАКТИРОВАТЬ: Как я вижу, Джим уже предложил. ] Если это так, да, kaboom , как только вы «дотронетесь» до чего-либо связанного с OLE или вызов в среду выполнения. Та же история, что и с обратными вызовами мультимедийного таймера, fwiw, и я подозреваю, что вам придется принять те же меры предосторожности, что и с теми, которые имеют место в этом случае.

Короткая история с различными обратными вызовами потоков заключается в том, что вам нужно отправить сообщение себе, используя PostMessage, объявленный в typelib, чтобы объект Err не был установлен VB, а затем позвольте обратному вызову вернуться. Вы делаете свою собственную обработку при получении отправленного сообщения. Вот библиотека типов, которую я использовал для этого с библиотекой таймеров CCRP:

http://vb.mvps.org/tools/files/postmessage.zip

Надеюсь, это поможет ...

1 голос
/ 06 августа 2009

Кто перезванивает кому? Покажите нам маленький код.

Среда IDE может маскировать реальные проблемы, поэтому простота запуска не гарантирует, что вы делаете, поддерживается.

Одной из распространенных проблем с обратными вызовами является то, что среда выполнения VB6 не является поточно-ориентированной, поэтому, если другой поток обращается к вашему VB-коду, вы не можете делать ничего, что будет вызывать среду выполнения, например строки доступа или объекты. 1005 *

Существуют способы решения некоторых из этих проблем, но я думаю, что нам нужно узнать больше в первую очередь.

0 голосов
/ 07 августа 2009

Несколько вопросов:

  1. Это исполняемый файл на том же ПК, на котором он был разработан, или другой?
  2. Использует ли файл файл манифеста? Если так, то mainfest вызывает темы XP?
  3. Также, если вы используете манифест, использует ли манифест SXS для файлов OCX?
0 голосов
/ 06 августа 2009

Код запускается из того же места, что и IDE? Вероятно, это проблема со ссылками, и вам необходимо заново зарегистрировать DLL.

Пакет развертывания должен убедиться, что у вас все установлено.

...