Очищение следов СОМ

0 голосов
спросил 21 Июнь, 10 от Dido_kz1 (11,020 баллов) в категории Программные продукты Esri
привет всем, делаю СОМ объект, СОМ объект используя СОМ библиотеки Лотуса коннектится с сервером лотус.
Private Sub OpenDatabase_Click()
Dim s As New NotesSession

Call s.Initialize
.....
.....
....
End Sub
 но после закрытия моей формы и аркмапа выходит

<!--quotec-->Инструкция по адресу "0x7c90100b" обратилась к памяти по адресу "0x00000020". Память не может быть "read".

пробовал set s=nothing хотя в этом нет необходимости,все равно не помогает, пробовал этот же СОМ подключить к другим приложениям Ексел,автокад, там не выходит эта ошибка, закоментировал Call s.Initialize и ошибка исчезла, как будто аркмап в памяти все равно оставляет следы, есть ли у интерфейса Iapplication метод или функция для очистки памяти. Может другие пути будут типа как  API

5 Ответы

0 голосов
ответил 21 Июнь, 10 от Dido_kz1 (11,020 баллов)
сделал просто так:
в пустом мхд документе написал код
Private Function MxDocument_OpenDocument() As Boolean
Dim ns As New NotesSession
ns.Initialize ("123456")
MsgBox ns.CommonUserName
set ns=nothing
End Function
и все равно выходит
Инструкция по адресу "0x7c90100b" обратилась к памяти по адресу "0x00000020". Память не может быть "read".
Хотя я сессию убиваю set ns=nothing, все равно в памяти IApplication остается обращения к лотус серверу, как убить все обращений
0 голосов
ответил 21 Июнь, 10 от pooperec (10,820 баллов)
Я так понимаю Вы написали свой инструмент/комманду, при нажатии на кнопку команды происходит какие-то действие (назовем его "Something").

В последствии при закрытии ArcMap`a у Вас вываливается некая ошибка. Чудно.

1. Создаете ли Вы в своем объекте формы, объекты, если да - то убиваете ли Вы их?
2. Оверрайдили (переопределяли) ли Вы деструктор комманды?
3. На каком языке Вы пишете?
4. Пытались ли Вы апартаменты освобождать сами?
0 голосов
ответил 23 Июнь, 10 от Dido_kz1 (11,020 баллов)
так, ещё раз, даже не СОМ, даж формы нету, делаю коннект к лотус серверу использую СОМ библиотеки лотуса
Dim ns As New NotesSession
ns.Initialize ("123456")
MsgBox ns.CommonUserName
set ns=nothing
End Function
и закрываю аркмап, выходит та же ошибка
как ещё её убивать то кроме nothing
получается аркмап у себя запоминает обращение к лотусу, даж если я сессию убиваю
0 голосов
ответил 23 Июнь, 10 от TDenis (42,620 баллов)
VB6?
Если msgbox убрать, по прежнему будет вылетать?

У лотуса этого нет никаких методов типа Quit или Exit, в противоположность Initialize?
Может попробовать привести к IUnknown и вызвать Release()?
0 голосов
ответил 23 Июнь, 10 от pooperec (10,820 баллов)
Dido_kz
Я задавал вопросы не из праздного любопытства. Например в Делфи, такая ошибка может возникнуть при повторном вызове метода CoUnitialize (неявный вызов которого происходит просто при подключении модуля ComObj), и повторным будет вызов этого метода ArcMapом...
Поэтому Вы ответьте пожалуйста...
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...