powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
12 сообщений из 12, страница 1 из 1
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32994948
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли и как
Передать ссылку на объект от одного VB или VBA приложения другому ?

Например, есть VB приложение My1.exe и XLS файл X.xls ,
хочу при выполнении My1.exe передать объект MyObject (созданый здесь же в My1.exe ) в Public переменную Public P as Object , находящуюся в одном из модулей X.xls ( ну или в другой какой контейнер вместо P переменной, - не знаю какой).
После чего запустить X.xls (ну это не проблема), чтобы он работал уже с только что установленым значением P .

PS.
( Ну или вместо X.xls может выступать другое Vb приложение My2.exe )
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995125
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой класс выступает в качестве Object?
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995314
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я не конкретизирую - любой значит . Вообще для данного случая ADODB.Connection.
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995354
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yunikiТак я не конкретизирую - любой значит . Вообще для данного случая ADODB.Connection.

Без извратов - никак.
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995381
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yunikiТак я не конкретизирую - любой значит . Вообще для данного случая ADODB.Connection.

2 yuniki

в данном случае и передай как ADODB.Connection. только ссылку на АДО
не забудь в поставить во всех потребных местах.

а не конкретизировать не получится. потому как весь сом на идее согласования интерфейсов построен.


'--------------------------------------------
все нижеследующее написано для nibbles
(кроме последнего предложения)
'--------------------------------------------

"вообще" (без извратов) это делается так:

0) Созданным объектом владеет создатель. И с уничтожением процесса-создателя будет уничтожен и созданный им объект
(или попытка уничтожения процесса-создателя провалится)

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

1) Интерфейс передаваемого объекта должен быть известен обоим
приложениям. (Например, он должен быть описан в tlb-описателе, известном
на этапе компиляции обоим приложениям).

2) Если приложение - создатель несет полную ответственность за детали реализации класса-реализатора. то класс-реаализатор обязан implements
маршаллируемых (межпроцессно-передаваемых) свойств и методов.

3) наилучшим кандидатом для реализации такого класса применительно к варианту взаимодействия exe-exe, по умолчанию является класс формы.


2 2 nibbles
а "с извратами" - как ?

Последнее предложение:
Если все вышеизложенное по любым причинам не устраивает yuniki,
значит он неправильно сформулировал свой вопрос.
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995395
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha2 2 nibbles
а "с извратами" - как ?

Например, запись строки подключения в одну из ячеек рабочей книги с последующим считыванием оттуда.

Victosha yunikiТак я не конкретизирую - любой значит . Вообще для данного случая ADODB.Connection.

2 yuniki

в данном случае и передай как ADODB.Connection. только ссылку на АДО
не забудь в поставить во всех потребных местах.

а не конкретизировать не получится. потому как весь сом на идее согласования интерфейсов построен.


Как будет выглядеть "и передай как ADODB.Connection" на практике?
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995407
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 nibbles >
Например, запись строки подключения в одну из ячеек рабочей книги с последующим считыванием оттуда.
Ну, какие же это извраты, - это обычный штатный способ :

Dim XlApp As Excel.Application, xlBook As Excel.Workbook, Rng As Excel.Range
Set xlApp = CreateObject("Excel.Application") ' Создание НОВОГО экземпляра
Set xlBook = xlApp.Workbooks.Add
xlApp.Range("$A$2") = "asfdasdfasdfasf"

Просто , а если надо в Vb приложение, где нет такой ячейки, которая примет мою строку,
или передать надо не строку а как написал - объект.

2 Victosha >
а не конкретизировать не получится. потому как весь сом на идее согласования интерфейсов построен.

Так а если dim P as Object (см. первый пост)

Вообще, нельзя ли объяснить попонятнее, с каким-нибудь простым примером - шаблоном.
А то , как- то не могу монять, что же надо сделать.
Пусть надо передать ссылку на объект ADODB.Connection из VB приложения, где он создан,
в новый XLS файл - т.е. вначале , видимо, создать объект Set xlApp = CreateObject("Excel.Application"), как в примере выше и далее, оттталкиваясь от XlApp, что надо сделать ?
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995408
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 yuniki
Вы уж определитесь, сударь - Вам в новый или "по шаблону"
(выкладываю "по шаблону")

2nibbles, с некоторыми запятыми - примерно так (к коннекшну применительно)
(разветь, надеюсь, ясно куда и как...)
(по счастью, реализация на стороне "сервера" не требуется...)




(с выражением лица)
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995415
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha2 yuniki
Вы уж определитесь, сударь - Вам в новый или "по шаблону"
(выкладываю "по шаблону")

2nibbles, с некоторыми запятыми - примерно так (к коннекшну применительно)
(разветь, надеюсь, ясно куда и как...)
(по счастью, реализация на стороне "сервера" не требуется...)


База не открывается (неизвестный формат - у меня Acc'2000), но принцип понятен - интересный метод.
Не понял насчет запятых - что имелось ввиду?
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32995421
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nibbles Victosha2 yuniki
Вы уж определитесь, сударь - Вам в новый или "по шаблону"
(выкладываю "по шаблону")

2nibbles, с некоторыми запятыми - примерно так (к коннекшну применительно)
(разветь, надеюсь, ясно куда и как...)
(по счастью, реализация на стороне "сервера" не требуется...)


База не открывается (неизвестный формат - у меня Acc'2000), но принцип понятен - интересный метод.
Не понял насчет запятых - что имелось ввиду?
запятые -
1) приложение-создатель соединения - оно же создает экземпляр рекордсета.
Если создать новый экземпляр рекордсета в Эксель, а коннекшн пепедавать извне - то ничего не получится.
(АДО отображается на текущее приложение и тогда вновь созданный экземпляр рекордсета "не найдет" "своего" объекта соединения.)

2) вообще говоря, (по крайней мере применительно к VB), тема чуть тоньше.
Минимально необходима совместимость по описателям библиотек (tlb).
в самом общем случае, желательна (а иногда обязательна) общеизвестность интерфейса/ов
на уровне системы (он должен быть зарегистрирован в реестре).
В "сложных" случаях может потребоваться activeX exe как точка взаимодействия.

PS
примыкает к теме - dde, передача информации через мапированные файлы.
(однако "в данном случае" все это ни к чему...)

ЗЫ2
прикладываю мдб в формате 2К
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #32996055
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha >
Спасибо!
С Excel и иже с ним все ясно - про метод Application.RUN я и подзабыл. Он сильно выручает в данном случае.

А как быть если надо передать не в VBA с их Application.RUN, а в другой VB екзешник?
Какие там будут ключевые слова.

PS
Victosha2 yuniki
Вы уж определитесь, сударь - Вам в новый или "по шаблону"
(выкладываю "по шаблону")
(с выражением лица)
Не понял только причем здесь " в новый " и какое "выражение лица" ?
...
Рейтинг: 0 / 0
Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
    #33004495
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, напоролся тут еще на одну проблему :
Если попытаться в вызываемом Excel использовать свой(не переданный) Recordset, то выходит облом :
Вот вызов из Access, но из Vb приложения точно также( даже с MDB базой)

Вызов Из ADP Access2K Excel2K :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Sub AdpSetCnn()

Dim Rec As ADODB.RecordSet
Rec=New ADODB.RecordSet

  Dim tBook As Excel.Workbook
  Set tBook = GetObject(CurrentProject.Path & "\TestCnn.xls")
  tBook.Activate
  'tBook.Application.Visible = True
  'tBook.Windows(1).Visible = True
  Call tBook.Application.Run("testCnn.XLS!SetCnn", _
                              CurrentProject.Connection, Rec)
end sub
 


В TestCnn.xls :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub XlSetCnn(Cnn As ADODB.Connection, Rec As ADODB.Recordset)
 
       Set Rec.ActiveConnection = Cnn                         ' Это без проблем !!!
       Rec.Open "Select * From #sv_Договоры_Клиенты" ' Это без проблем !!!

       Dim r As ADODB.Recordset
       Set r = New ADODB.Recordset
       Set r.ActiveConnection = Cnn ' а вот здесь не получается присвоить!!! :
' Аргументы имеют неверный тип, выходят за пределы 
  допустимого диапазона или вступают в конфликт друго с другом '
       
end sub


Да , строка связи CurrentProject.Connection :
Provider=MSDataShape.1;Persist Security Info=False;Data Source=YUNIK\MSTEST;
User ID=sa;Initial Catalog=Ломбард;Data Provider=SQLOLEDB.1
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли и как Передать ссылку на объект от одного VB или VBA приложения другому ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]