powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Написал программу, а на чужом компе она требует библиотеки
11 сообщений из 36, страница 2 из 2
Написал программу, а на чужом компе она требует библиотеки
    #34020028
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnЯ всегда считал, что CreateObject в VB6 требуется исключительно для "недоделанных" компонентов СОМ, которые не поддерживают "As New".

В остальных случаях - зачем?
Ого. Не ожидал.
Для того, чтобы создать экземпляр класса на другом сервере. Для того, чтобы создать экземпляр класса в новом потоке. например.
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020046
Slice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn
запутался чуток в расуждениях.... Ведь на одном компе все есть ( и прога работает и библиотеки нашлись) зачем тада компилятор нужен?
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020047
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, а что, "As New" в этом случае работать не будет? Обязательно позднее связывание? Мне никогда не требовалось использовать CreateObject, потому и спрашиваю.
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020194
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slice, я не запутался

Бенедикт, поток - это в английской терминологии thread, также?
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020217
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConn,
позднее связывание - это работа через IDispatch, а не напрямую через vtbl, для программы и отсутствие полезных фишек типа AutoCompletion для программиста. К способу создания экземпляра отношения не имеет, разве что выполняя Set NewItem = CreateObject("MyLib.MyItem"), программа тратит время на проверку типа объекта, т.к. CreateObject возвращает Object. Если NewItem описан As MyLib.MyItem (библиотека типов MyLib упомянута в References), дальнейшее обращение к свойствам/методам пойдёт через vtbl.

Для указанных мною случаев: 1) у New нет синтаксиса для явного указания сервера. Ну нет на клиентской машине сервера приложений, он стоИт на серверной машине, как тогда создать экземпляр? 2) использование New не приведёт к желаемому эффекту - экземпляр MultiUse класса создастся в основном потоке (кстати, под IDE и CreateObject сделает то же самое).
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020218
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladConnSlice, я не запутался
Бенедикт, поток - это в английской терминологии thread, также?
Да.
Еще один аргумент в пользу CreateObject - чтобы не держать постоянно лишних объектов (ссылок) в памяти. Создал объект - использовал - убил.
Возникла ошибка при создании - прога не отвалилась (как в случае с референсами), а просто выругалась.
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020227
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkiades,
угу.
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020271
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkiades,

Я думаю, совсем не обязательно использовать CreateObject для того, чтобы не держать лишних ссылок в памяти. Разве Set Nothing здесь не достаточен?
Что касается вопроса отвалится программа или нет - так я пишу соответственно поддержку ошибок. Но может я и чего-то не знаю. В таком случае было бы здорово увидеть живой код, иллюструющий бессилие On Error и полезность CreateObject, чтобы программа не отваливалась.


Бенедикт,

Спасибо за информацию о серверах и потоках. Насколько я знаю, VB6 не очень приспособлен для многопоточных задач, хотя в принципе можно.

VladConn
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020396
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел внимательнее на CreateObject. Да, там опция на имя сервера. Я бы не стал на нее надеяться: сервера могут меняться. Все-таки инсталляция надежнее. А что касается многопотоковости - использование VB6 не лучшая идея для этого.
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34020545
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot VladConn]Я бы не стал на нее надеяться: сервера могут меняться.[/qout]
Строковые параметры могут меняться, это точно . Настраиваемые параметры принято где-нибудь хранить - например, в реестре.
[quot VladConn]Все-таки инсталляция надежнее.[/qout]
Инсталляция чего? Поставить MDAC, чтоб ADODB.Command создавать локально, можно на любую клиентскую машину, а поставить какой-нибудь DCOM-сервер можно (исходя из логики приложения, цены, настроек безопасности...) только на одну специально выделенную машину, и пользоваться им будут десятки клиентов. Или технологии клиент-сервер и DCOM стали не нужны?

Насчёт многопоточности. В MSDN Library в разделе "Visual Basic Concepts" (подчёркиваю - Concepts ) есть глава "Scalability and Multithreading", есть пример "Creating a Multithreaded Test Application". Да, с точки зрения человека, привыкшего к CreateThread, EnterCriticalSection и WaitForSingleObject, это не совсем та многопоточность (хотя можно что-то подсмотреть у того же Matthew Curland-а что-то в этом роде). Это многопоточность в русле COM (да и с точки зрения ОС потоки вполне нормальные).
...
Рейтинг: 0 / 0
Написал программу, а на чужом компе она требует библиотеки
    #34022558
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут кстати у меня еще всплыло соображение насчет дистрибутива. Допустим, приложение использует библиотеки Excel. Вы, я, все-равно, составляем инсталляционный пакет, включающий нужные библиотеки. А как делать деплоймент на станцию, где нет Excel? Легально как? Ведь нужен лайсенс.

Получается, что нужен-таки CreateObject еще и из соображений легальности? Мол если есть библиотека, то она подхватится, а нет, так у нас нет прав на ее установку.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Написал программу, а на чужом компе она требует библиотеки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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