(изменено: teem0n, 10 января 2012г. 13:26:13)

Тема: Ссылка на объект в словаре

Здравствуйте!

С прошедшими праздниками  :)

Не получается сохранить указатель на объект в словаре, TDMS 4.120. Делаю так:

Sub getAcadApp ()
   dim App
   set dictApp = thisapplication.Dictionary(1).Item("OpenedACAD")
   set App = CreateObject("AutoCAD.Application")
   App.Visible = false
   set dictApp = App
   set App = nothing
   if dictApp is nothing then msgbox "nothing taken!!!"
End Sub

Здесь все отрабатывает корректно, месседжбокса нет.

Затем вызываю такую функцию:

Function UpdateACADStamp(FileIn, Obj, Offset)
   call getAcadApp
   Set objAcad = thisapplication.Dictionary(1).Item("OpenedACAD")    
   if thisapplication.Dictionary(1).Item("OpenedACAD") is nothing then msgbox "another time nothing taken"

И вот тут выскакивает месседжбокс "another time nothing taken  :(

(изменено: m_skipper, 10 января 2012г. 14:38:14)

Re: Ссылка на объект в словаре

Здравствуйте!

..
   set dictApp = thisapplication.Dictionary(1).Item("OpenedACAD")
..
   set dictApp = App
..
   if dictApp is nothing then msgbox "nothing taken!!!"

Локальная переменная dictApp(не словарь) переписывается 2 раза.
В данном случае, App в dictionary никогда не попадает.
set нужен в присвоении поскольку присваивается указатель на объект(т.е. это не ссылка на объект словаря, а ссылка на объект ACAD).

Т.о. чтобы добавить объект в dict в данном случае нужно
set thisapplication.Dictionary(1).Item("OpenedACAD") = App

а чтобы его потом оттуда достать

set dictApp = thisapplication.Dictionary(1).Item("OpenedACAD")
и только после этого пользоваться dictApp.

Re: Ссылка на объект в словаре

А вот так делать можно
   set dict = thisapplication.Dictionary("SomeNamedDict")

в этом случае dict - ссылка, но на весь словарь целиком.

dict("SomeValue") = 3
msgbox dict("SomeValue")
что тоже самое: msgbox dict.Item("SomeValue")

dict.Item("SomeValue") - простой вариант. Но если в него добавляются объекты, то нужно использовать для присвоения set.

т.е.

set dict("ACAD") = AcadApp
set app = dict("ACAD")

Re: Ссылка на объект в словаре

m_skipper пишет:

А вот так делать можно
   set dict = thisapplication.Dictionary("SomeNamedDict")

в этом случае dict - ссылка, но на весь словарь целиком.

dict("SomeValue") = 3
msgbox dict("SomeValue")
что тоже самое: msgbox dict.Item("SomeValue")

dict.Item("SomeValue") - простой вариант. Но если в него добавляются объекты, то нужно использовать для присвоения set.

т.е.

set dict("ACAD") = AcadApp
set app = dict("ACAD")

Мда, глупая ошибка, спасибо!