Имя: Пароль:
1C
1С v8
Access violation при выполнении внешней компоненты. NativeAPI, c++
,
0 dmitrriykriv
 
10.11.14
11:47
Писал я внешнюю компоненту на с++ для УПП, все работает прекрасно, пока тестирую на маленькой конфе, но стоит подключить на самой УПП при выходе из функций ( в отладчике на последней скобке) вылетает с той самой ошибкой 0xC0000005: Access violation. Проверял на обращения к NULL - все чисто, судя по тому, что на мелкой конфе все работает, с  компонентой все более-менее в норме, утечек памяти нет. Уже не знаю что делать, подскажите, пожалуйста
1 vde69
 
10.11.14
11:51
сталкивался...

скорее всего в компоненте при выходе есть открытые
дескрипторы, вероятнее всего не разрушены какие-то обьекты или не освободил память
2 dmitrriykriv
 
10.11.14
12:03
Сейчас посмотрю еще раз... но тогда не понятно, почему на одной конфигурации работает, а на другой нет
3 Мутабор
 
10.11.14
12:03
(2) На одном компе или разных?
4 dmitrriykriv
 
10.11.14
12:04
На одном
5 dmitrriykriv
 
10.11.14
13:54
Добавил разрушение окошка(почти все функции работают с использованием механизма оконных сообщений)  в деструктор класса, теперь ошибок нет, но функции не всегда отрабатывают:( Видимо, 1С-ка запускает деструктор когда попало, а не только во время уничтожения компоненты... Хотя в отладке этого не видно
6 vde69
 
10.11.14
14:05
(5) читай про совместное использование дискрипторов
7 vde69
 
10.11.14
14:09
(2) причина в сборщике мусора 1с, он работает в зависимости от загрузки, по этому на разных базах он работает по разному....

то есть разрушение фактическое обьекта DCOM происходит в разное время
8 Serginio1
 
10.11.14
14:38
(7) Это когда в 1С сборщик мусора появился? Разве там не подсчет ссылок?
9 vde69
 
10.11.14
14:43
(8) я не являюсь истиной в последней инстанции, но для себя предстваляю механизм работы 1с (еще с версии 7.5) именно через сборщик мусора, этим обьясняется много фичей 1с, типа подключаем таймер к процедуре формы и закрываем форму, но фантомный код закрытой формы будет выполнятся все равно...
10 Кирпич
 
10.11.14
15:02
А 1С фантомный код еще вершит,
но пали руки.
И стайкою наискосок
ходят запахи и звуки.
11 Кирпич
 
10.11.14
15:02
уходят
12 Serginio1
 
10.11.14
15:06
(9) Судя по работе с COM объектами там элементарный подсчет ссылок. orefkof выходи
13 Кирпич
 
10.11.14
15:08
Да какая разница есть там подсчет ссылок или нету. Автор тупо понашлёпал ошибок с указателями и все дела.
14 vde69
 
10.11.14
15:12
(12) я-бы так не сказал...

ты вкурсе, что можно подключить обработчик 1с к событию в COM обьекте, и наоборот?

так, что я думаю, там немного сложнее все, по тому как дескрептрор ресурса (твой счетчик ссылок) может размещатся как в памяти 1с так и в памяти COM обекта, которая не всегда имет прямой доступ по адресации, и вообще могут быть в разных сегментах.
15 Serginio1
 
10.11.14
15:37
Знаю при этом, что бы от циклических ссылок избавиться нужно отписываться. Так в COM и есть подсчет ссылок через методы интерфейса IUnknown
http://rod.ucoz.net/index/0-19
16 DmitrO
 
10.11.14
15:48
Нет там сборщика мусора, это вообще другая технология управления памятью. В 1С как и в COM простой подсчет ссылок.
17 Кирпич
 
10.11.14
15:59
(16) есть там сборщик мусора. vde69 его лично выдумал. и фантомный код еще есть. он лично видел.
18 H A D G E H O G s
 
10.11.14
16:14
(0) Хуки, переопределения оконных процедур есть? А если найду?
19 H A D G E H O G s
 
10.11.14
16:14
Хотя, сплюснутый язык, хер я че там найду.
20 Кирпич
 
10.11.14
16:16
(19) если глючит, значит есть. можно и не искать.
21 dmitrriykriv
 
11.11.14
10:27
Был один дескриптор открытый все-таки... А хуков нет
22 Кирпич
 
11.11.14
10:39
(21) продолжай искать
23 dmitrriykriv
 
11.11.14
10:43
(22) Сейчас уже не крашится, стабильно работает
24 dmitrriykriv
 
11.11.14
10:52
Интересно, почему все-таки на маленькой конфигурации все работало и до исправления косяка?
25 vde69
 
11.11.14
11:06
(24) по тому, что памяти свободной навалом. А на УПП была попытка использовать "свободную" память по факту занятую обьектом компонеты
26 Кирпич
 
11.11.14
11:08
(24) У тебя же есть все данные. И обе конфигурации и твоё нетленное творение на С++. Вот сиди и анализируй. Зачем тебе чьи то догадки?
И вообще, надо ветку вовремя закрывать. А то набегут специалисты по ядерному оружию и экономике.