Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96

Работа/не работа редактора VB6 в Windows 10

08.09.2020, 17:05. Показов 2984. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Удалось установить VB6 на Windows 10 (64bit).

И все мои проекты разделились на две группы.
1 проекты запускаются в Windows 10 и с позволяют отлаживать код.
2 после F5 через несколько секунд выгружают VB6.

В обеих группах есть референсы к библиотеке Excel, подцеплены компоненты mscomctl.ocx

Найти разницу и привести группу 2 к состоянию группы 1 мне не удается: коды довольно объемные для меня, форм ок. 10, есть классы. Уже потратил довольно много времени, но безрезультатно.

Если есть какие-то советы куда покопать, чтоб попытаться группу 2 перевести в группу 1, буду признателен.

Да откомпилированные проекты группы 1 работают нормально в Windows 10.
Проекты группы 2, откомпилированные в Windows XP, в Windows 10 функционируют тоже нормально.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2020, 17:05
Ответы с готовыми решениями:

Работа текстового редактора
Привет. Скажите как работает редактор текста (именно элемент EditBox). Я вообще не шарю как это может работать, ну типа: наверно,...

Работа с Excel из VB6
две недели назад открыл для себя программирование, начал с vba, так как хотел оптимизировать свою работу в excel. Сейчас пробую написать...

Работа с массивами vb6.0
кто сможет чем помочь в написание программы? PS скриншоты к заданиям ниже! ниже прикреплю все то что не поместилось в...

35
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
10.09.2020, 09:36  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dragokas Посмотреть сообщение
Скинь дамп падания. Может, по нему удастся понять.
Для этого примени приложенный твик. Дампы будут сохраняться в C:\CrashDumps
VB6.EXE.2620.zip
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.09.2020, 22:05
Получил проект.

У меня всё нормально запустилось.
Ставил на свежеустановленную Win 10 x64 со всеми обновлениями.
Сверху только Visual Studio 2019, VB 6.0, Microsoft Office 2019 x32.
Мой фикс для установщика IDE. Фикс для MSCOMCTL не ставил.
При запуске от админа проекта немного поругалось на MSCOMCTL.
Далее я скопировал в папку проекта мой MSCOMCTL.OCX.
Зашел от админа в проект, выбрал Project - Components - и указал файл этого компонента.
Сохранил и переоткрыл проект. Дальше поругалось на:
Visual Basic
1
Set goApp = GetObject(, EXCEL_APP)
Такой способ подключения не всегда будет работать. Используйте ROT. Кроме того, в вашем варианте вы не сможете выбрать конкретный экземпляр.
Вообщем, я по быстрому просто прописал:
Visual Basic
1
2
Set goApp = CreateObject("Excel.Application")
goApp.Workbooks.Add
Прога запустилась.
При закрытии была одна логическая ошибка.
Ну и через несколько секунд корректно закрылось.
1
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
11.09.2020, 06:10
Пора оставить его в прошлом Зачем вы тероризируете старичка
0
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
11.09.2020, 10:19  [ТС]
Цитата Сообщение от UBUNTU Посмотреть сообщение
Зачем вы тероризируете старичка
Чтоб не переделывать работающий код, которого достаточно много )
0
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
11.09.2020, 10:53  [ТС]
Dragokas, огромное спасибо за внимание и участие.
К сожалению, у меня проблема осталась. И 10-ке (x64) и в 7-ке (x64)

Сел еще раз и методами исключения и "научного тыка" нашел место в коде, из-за которого редактор VB6 вываливался.
К этом коду программа не обращается.
Записал видео программой UVScreenCamera.
Видео Найденное место кода
Если пойдет без звука, поясню. Добавил скриншоты.
1 При исходном коде VB6 самовыгружается при запуске проекта.
2 Ремирование в одном конкретном месте кода операторов Do...Loop отменяет умирание VB6.
3 Замена Do...Loop на While...Wend отменяет умирание VB6.
4 Простое добавление (из любопытства) While...Wend после разремированного Do...Loop отменяет(!?) умирание VB6.
1 Возврат к исходному коду приводит к умиранию VB6.

Вообще, конечно, очень неожиданно.
Замечу еще раз в Windows XP такой проблемы нет.
Откомпилированная в Windows XP программа нормально работает и в 10-ке и 7-ке.

Подсоединение к Excel не происходит, но это сейчас не главное.
Поизучаю советы Dragokas и, видимо, ими воспользуюсь.

Интересно, может ли быть тут какое-то объяснение?
Миниатюры
Работа/не работа редактора VB6 в  Windows 10   Работа/не работа редактора VB6 в  Windows 10   Работа/не работа редактора VB6 в  Windows 10  

Работа/не работа редактора VB6 в  Windows 10  
0
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
11.09.2020, 13:50
brigval, если это ваш код прям уважение за оформление кода! Помню в вб6 писал как попало код в нет только начал нормально расставлять
0
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
11.09.2020, 14:44  [ТС]
Цитата Сообщение от UBUNTU Посмотреть сообщение
brigval, если это ваш код прям уважение за оформление кода! Помню в вб6 писал как попало код в нет только начал нормально расставлять
Спасибо )
Без структурирования иногда очень сложно бывает: не найти концов, особенно в очень-многосторочных процедурах.
Привычка-с ))
0
bite
 Аватар для I can
5011 / 4841 / 852
Регистрация: 13.04.2015
Сообщений: 10,121
11.09.2020, 14:48
Цитата Сообщение от UBUNTU Посмотреть сообщение
в нет только начал нормально расставлять
Не свисти Студия сама расставляет.
0
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
11.09.2020, 15:02  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Используйте ROT.
После компиляции нет проблем с подключением через
Code
1
Set goApp = GetObject(, EXCEL_APP)
А в режиме отладки надо работать с уже открытым файлом. ((
Использование ROT пока не принесло успеха, о чем написал в соответствующей теме.

Пробовал подключаться к SolidWorks. Аналогичная проблема. В режиме отладки программа подключается только к ею созданному экземпляру SolidWorks по
Code
1
Set moSW = CreateObject(SW_APP)

Цитата Сообщение от Dragokas Посмотреть сообщение
Кроме того, в вашем варианте вы не сможете выбрать конкретный экземпляр.
Это да. Но решается загрузкой одного экземпляра. Пока это не критично. Хотя изредка и приходится через Диспетчер задач убивать лишний процесс.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
11.09.2020, 15:54
Ну тогда попробуйте еще раз без REM, но с брейкпоинтами в пошаговом режиме.
Может, там какая трабла с типизацией, Null затесался или что подобное...
0
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
11.09.2020, 16:43
I can, не все коды
0
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
11.09.2020, 18:17  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Ну тогда попробуйте еще раз без REM, но с брейкпоинтами в пошаговом режиме.
Может, там какая трабла с типизацией, Null затесался или что подобное...
Dragokas, не видел Вашего сообщения, нашел на просторах Интернета. Работает...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Option Explicit
 
Private Declare Function IIDFromString Lib "ole32.dll" (ByVal lpsz As Long, lpiid As Any) As Long
 
Private Type GUIDs
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type
 
Private Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" _
        (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
         ByVal lpsz2 As String) As Long
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" _
        (ByVal hWnd As Long, ByVal dwId As Long, ByRef riid As GUIDs, _
         ByRef ppvObject As Object) As Long
         
 
Private Const S_OK As Long = &H0
Private Const IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}"
Private Const OBJID_NATIVEOM As Long = &HFFFFFFF0
 
'===============================================================================
Function GetExcelApp() As Object
   Dim xlApp   As Object ' Excel.Application
   Dim i       As Long
   Dim hWinXL  As Long
'   Dim wb      As Object  ' Excel.Workbook
    hWinXL = FindWindowEx(0&, 0&, "XLMAIN", vbNullString)
    While hWinXL > 0
        i = i + 1
'        Debug.Print "Instance_" & i; hWinXL
        If GetXLapp(hWinXL, xlApp) Then
            Set GetExcelApp = xlApp
            Exit Function
        End If
        hWinXL = FindWindowEx(0, hWinXL, "XLMAIN", vbNullString)
    Wend
End Function
'===============================================================================
'Function GetXLapp(hWinXL As Long, xlApp As Excel.Application) As Boolean
Function GetXLapp(hWinXL As Long, xlApp As Object) As Boolean
   Dim iid        As GUIDs
   Dim obj        As Object
   Dim hWinDesk   As Long
   Dim hWin7      As Long
   '
   Call IIDFromString(StrPtr(IID_IDispatch), iid)
   '
   hWinDesk = FindWindowEx(hWinXL, 0&, "XLDESK", vbNullString)
   hWin7 = FindWindowEx(hWinDesk, 0&, "EXCEL7", vbNullString)
   '
   If AccessibleObjectFromWindow(hWin7, OBJID_NATIVEOM, iid, obj) = S_OK Then
       Set xlApp = obj.Application
       GetXLapp = True
   End If
End Function
Сначала проверяю стандартным GetObject, потом с помощью API

Visual Basic
1
2
Set goApp = GetObject(, EXCEL_APP)
If goApp Is Nothing Then Set goApp = GetExcelApp()
Теперь бы найти для других программ. SolidWorks, например.
Видимо, там надо менять IID_IDispatch, "XLMAIN", "XLDESK", "EXCEL7"

Добавлено через 7 минут
Такая строка есть в реестре, только не нашел как она связана с Excel
Code
1
{00020400-0000-0000-C000-000000000046}
Добавлено через 50 минут
Цитата Сообщение от Dragokas Посмотреть сообщение
Ну тогда попробуйте еще раз без REM, но с брейкпоинтами в пошаговом режиме.
Может, там какая трабла с типизацией, Null затесался или что подобное...
Честно говоря, не совсем понял. Что попробовать?
Dragokas, если речь о циклах Do...Loop, то программа туда не заходит. VB6 умирает во время компиляции.
В голове не укладывается, что из-за строчек кода падает редактор VB6.
Но это факт.
Пробовал запускать в пошаговом режиме по F8. Умирала на втором-третьем шаге. Уже сейчас и не помню точно, но очень быстро.
По ощущениям, как будто запускался какой то процесс и уже было не остановить крах.
0
bite
 Аватар для I can
5011 / 4841 / 852
Регистрация: 13.04.2015
Сообщений: 10,121
11.09.2020, 18:32
Цитата Сообщение от brigval Посмотреть сообщение
В голове не укладывается, что из-за строчек кода падает редактор VB6.
Была подобная ситуация. Пять строчек кода, использовал две функции Chr и Asc, никаких циклов, никаких сторонних библиотек и компонентов, а среда разработки рушилась при запуске. Просто закрывалась без каких-либо ошибок и сообщений. Я был сильно удивлён, пришлось немного изменить код.
0
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
13.09.2020, 08:35  [ТС]
К вопросу подключения/не подключения из IDE VB6 с помощью
Visual Basic
1
2
Set goApp = GetObject(, EXCEL_APP)
Set moSW = GetObject(, SW_APP)
Найдено описание решения здесь
Если IDE VB6 запущен от имени администратора, то подключение происходит, когда и приложение для подключения тоже запущено от имени администратора.

Добавлено через 3 минуты
Цитата Сообщение от I can Посмотреть сообщение
Была подобная ситуация. Пять строчек кода, использовал две функции Chr и Asc, никаких циклов, никаких сторонних библиотек и компонентов, а среда разработки рушилась при запуске. Просто закрывалась без каких-либо ошибок и сообщений. Я был сильно удивлён, пришлось немного изменить код.
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
13.09.2020, 12:06
Цитата Сообщение от brigval Посмотреть сообщение
нашел на просторах Интернета. Работает...
Да, через AccessibleObjectFromWindow тоже хороший вариант.

Цитата Сообщение от brigval Посмотреть сообщение
Теперь бы найти для других программ. SolidWorks, например.
Видимо, там надо менять IID_IDispatch, "XLMAIN", "XLDESK", "EXCEL7"
IID_IDispatch менять не нужно.

Вам необходимы классы окон заголовка и рабочей области, т.е. самой книги.
Берете любую программу для захвата оконной инфы, например, Spy++, лично я предпочитаю Windowzer by ManHunter.
Наводите мышкой на заголовок окна, см. поле "GetClassName", аналогично, когда наводите на любую ячейку.
Классы могут отличаться в разных версиях Excel, в теории, так что надо перепроверить.
1
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
15.09.2020, 14:46  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Берете любую программу для захвата оконной инфы, например, Spy++, лично я предпочитаю Windowzer by ManHunter.
Наводите мышкой на заголовок окна, см. поле "GetClassName", аналогично, когда наводите на любую ячейку.
Классы могут отличаться в разных версиях Excel, в теории, так что надо перепроверить.
В принципе, запускать для подключения в IDE целевую программу (Excel, SolidWorks...) от администратора меня для практических целей вполне устраивает.
Поэкспериментировать сверх своей поставленной задачи пока нет возможности.
Но попробовал Windowzer by ManHunter, для Excel четко показывает, для SolidWorks - ничего.
На скриншоте видно, что указатель мыши над окном чертежа SolidWorks, но ожидаемого результата нет.
Может, что-то недопонял или не так делаю...
Миниатюры
Работа/не работа редактора VB6 в  Windows 10  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2020, 14:46

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

Работа с почтой из VB6
Нужно сформировать и отправить Excel файл по почте... Чтобы начать работать, нужно иметь библиотеку OLEMSG23.DLL. Скачать-то я ее скачал, а...

Работа с графикой в VB6
Здравствуйте, вы бы не могли подсказать, как указать начальную точку, с которой начинаться должен рисоваться график

Некорректная работа html редактора
Здравствуйте! У меня стоит html редактор, которым я уже давно пользуюсь. Называется он Antenna 3.3. Однако в один прекрасный день, он...

Работа билда отличается от редактора
Приветствую. Возникла проблема -> билд под андроид не соответствует, тому что происходит в редакторе. Через unityRemote все нормально,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru