powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
25 сообщений из 26, страница 1 из 2
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35144471
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Беру из архивов свой старый XLS' ский файл со ссылкой на мою VB DLL'ку.
Он работает нормально.
Перестраиваю эту DLL'ку.
Он работает нормально.

Перепривязываю в нем эту DLL'ку.( след образом :
Tools\Refreneces\ отключаю OK, Tools\Refreneces\ подключаю OK )
Перестраиваю эту DLL'ку.
Он при запуске пытаясь использовать одну из функций этой DLL'ки и говорит, что DLL'ка не найдена. Смотрю в ссылках - напротив нее встало Missing

Как-то можно избавиться от этого
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35144591
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kefi,
попробуй компилировать с опцией 'Binary Compatibility'.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35144796
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ссылки не следают,
но мне-то прежде всего интересно :
ПОЧЕМУ так происходит в описанной мной ситуации ?
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35144853
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это не слетают? "Missing" - это именно слетают. ПОТОМУ, что GUID (LIBID) стал другой.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35144877
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Бенедикт >
Внимательно прочтите первый описанный мной вариант. Нет , лучше еще раз :

1 вариант :
Беру из архивов свой старый XLS' ский файл со ссылкой на мою VB DLL'ку.
Он работает нормально.
Перестраиваю эту DLL'ку. Без всякой совместимости
Он работает нормально. НЕТ слетевших ссылок . Вопрос - Почему ?

2 вариант :
Перепривязываю в нем эту DLL'ку.( след образом :
Tools\Refreneces\ отключаю OK, Tools\Refreneces\ подключаю OK )
Перестраиваю эту DLL'ку.
Он при запуске пытаясь использовать одну из функций этой DLL'ки и говорит, что DLL'ка не найдена. Смотрю в ссылках - напротив нее встало Missing
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145181
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kefi
> 2 Бенедикт >
> Внимательно прочтите первый описанный мной вариант. Нет , лучше еще
> раз :
>
> 1 вариант :
> Беру из архивов свой старый XLS' ский файл со ссылкой на мою VB
> DLL'ку.
> Он работает нормально.
> Перестраиваю эту DLL'ку. Без всякой совместимости
> Он работает нормально. НЕТ слетевших ссылок. Вопрос - Почему ?

А ты уверен, что он работает с ЭТОЙ версией твоей ДЛЛ? Найди все пути в
реестре и сравни GUID'ы, и тогда говори что уверен.

> 2 вариант :
> Перепривязываю в нем эту DLL'ку.( след образом :
> Tools\Refreneces\ отключаю OK, Tools\Refreneces\ подключаю OK )
> Перестраиваю эту DLL'ку.
> Он при запуске пытаясь использовать одну из функций этой DLL'ки и
> говорит, что DLL'ка не найдена. Смотрю в ссылках - напротив нее встало
> Missing

Вообще-то лучше использовать такой вариант:
> 3 вариант :
> Перепривязываю в нем эту DLL'ку.( след образом :
> Tools\Refreneces\ отключаю OK
> Перестраиваю эту DLL'ку.
> Tools\Refreneces\ подключаю OK )

Почему это происходит тебе уже писали, ещё советую обратится к "Сущность
технологии СОМ" Д. Бокс. Отпадут практически все вопросы :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145227
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Игорь Горбонос >
А ты уверен, что он работает с ЭТОЙ версией твоей ДЛЛ? Найди все пути в
реестре и сравни GUID'ы, и тогда говори что уверен.

На компьютере просто НЕТ другой такой.

Вообще-то лучше использовать такой вариант:
В каком смысле лучше ? Для моих целей лучше понять именно то , что я спрашиваю.

Почему это происходит тебе уже писали, ещё советую обратится к "Сущность
технологии СОМ" Д. Бокс. Отпадут практически все вопросы :)

Так если уже писали, зачем же ты опять об этом ? а насчет книжки, то не написана еще такая, чтоб все вопросы отпали, и вряд ли напишут когда.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145234
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kefi,

1) Каюсь, просмотрел.
Непонятно (в общем). И много факторов, которые могут влиять (включая историю изменений библиотеки, мусор в реестре, и просто случайность). Могу только предполагать. Например: код в нетронутом старом XLS находится в откомпилированном состоянии, а новая версия библиотеки (случайно или неслучайно) двоично совместима, по крайней мере, в той части интерфейсов, что используются. (Здесь скрытый вопросы, а не обновляет ли VBA ссылки при запуске и не перекомпилирует ли в случае обновления ссылки VBA проект; предположим, что обновляет - делает вызов QueryPathOfRegTypeLib(), обламывается, поскольку сменился LIBID, делает вызов LoadTypeLib() или RegisterTypeLib(), это прокатывает, поскольку файл библиотеки есть; перекомпиляции VBA проекта, однако, не происходит. Сплошные спекуляции...)

2) Здесь ошибка в последовательности действий: надо отключить, (разрегистрировать,) перекомпилировать (происходит автоматическая регистрация), подключить. Иначе получается, что подключили одну библиотеку, а используем другую. А поскольку "дёргали" XLS (точнее, проект VBA), код перекомпилировался под предыдущую версию библиотеки (т.е. имеем три (или более) версии одной вроде бы библиотеки(?)).
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145241
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kefiНа компьютере просто НЕТ другой такой.Библиотека идентифицируется не именем модуля (исполняемого файла). Вот о чём тебе толкуют.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145261
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, и им тоже; но во вторую очередь. Это IMHO. Если у кого-то есть ссылка на официальную информацию, как VBA проверяет и обновляет Reference-ы, и делает ли перекомпиляцию проекта в случае обновления, прошу поделиться.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145346
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что интересно :
в старом XLS файле стоят ссылки на DLL с другим GUID, чем имеющийся в моей системе, НО этот XLS работает с имеющимся GUID (версии DLL действительно фактически совместимы, но GUID у них разные, т.к. копилились в режиме несовместимости) причем даже, если (см вариант1) эту DLL в режиме несовместимости перекомпилять сколь угодно раз, все - равно ССЫЛКИ в этом XLS (кстати не только в этом , вообще вов всех моих c 2005 года XLS файлах) НЕ СЛЕТАЮТ.
И начинают эти ссылки после перекомпиляции слетать именно после того, как я перепривяжу их в XLS'ке.

А насчет того - как нужно делать правильно, так меня волнует несколько другое, - а именно как понять , что происходит, меня то как раз интересовал бы вариант, когда я перекомпилировал свою DLL, а у пользователей (они же имеют старые XLS приложения со старыми ссылками) эти ссылки бы не слетали. Поэтому задача сейчас как раз понять - что происходит.
Т.е. - почему после перепривязки, или просто в новом XLS файле после привязки ссылки начинают слетать после компиляции.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145355
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бенедикт kefiНа компьютере просто НЕТ другой такой.Библиотека идентифицируется не именем модуля (исполняемого файла). Вот о чём тебе толкуют.
а я в ответ толкую, что не может быть использована другая версия, если ее физически нет в системе
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145479
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бенедикт Если у кого-то есть ссылка на официальную информацию, как VBA проверяет и обновляет Reference-ы, и делает ли перекомпиляцию проекта в случае обновления, прошу поделиться.

Так мой старый XLS работает без изменений , - сохраняю ли я его , причем GUID в нем НЕ МЕНЯЕТСЯ при этом(о чем горворит activeworkbook.VBProject.References(9).Guid). И этот GUID, не совпадающий с GUID текущей DLL'ки (которую я могу перекомпилять много раз) нормально позволяет работать ,
Т.е. вроде как НЕТ никакой перекомпиляции при открытии XLS приложения.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145494
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kefi,
Библиотека типов, за которой VBA и лезет в DLL (она там лежит в виде ресурса) нужна на этапе компиляции ранне-связанного кода (ну, и редактирования, чтобы нажав точку, увидеть список методов). В откомпилированном коде идёт обращение к 5-му методу в таблице виртуальных методов объекта, а не к методу с именем "MyCoolMethod", т.е. информация из библиотеки типов не нужна (грубо). Соответственно, это может быть источником проблемы, если что-то в интерфейсе поменялось (это я ересь говорю с точки зрения COM - если интерфейс поменялся, то это другой интерфейс).

Для того, чтобы создать экземпляр объекта, надо знать его CLSID (ещё один GUID). Узнать его можно из ProgID - дружественного для человека имени, например, "Excel.Application". Ведь когда ты пишешь Set xlApp = CreateObject("Excel.Application"), ты ведь не задумываешься сильно, что на клиентской машине может стоять другая версия Excel, чем у тебя. То, что другой версии нет в системе, это не значит, что программа автоматически перестаёт работать.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145529
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kefiИ этот GUID, не совпадающий с GUID текущей DLL'ки (которую я могу перекомпилять много раз) нормально позволяет работатьВопрос - а если разрегистрировать DLL, переместить её в другой каталог, и снова зарегистрировать, позволяет?

kefiТ.е. вроде как НЕТ никакой перекомпиляции при открытии XLS приложения.Компиляцию сколь-нибудь большого проекта было бы видно на глаз, да и файл бы изменился, если б она происходила. Но это тоже - "вроде". Хочется увидеть формальное описание от производителя или эксперта: что, в какой момент, по какому алгоритму, в какой версии продукта.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145607
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Бенедикт
> kefi
> И этот GUID, не совпадающий с GUID текущей DLL'ки (которую я
> могу перекомпилять много раз) нормально позволяет работать
> Вопрос - а если разрегистрировать DLL, переместить её в другой
> каталог, и снова зарегистрировать, позволяет?

Я думаю позволит т.к. пока не трогать Referens используется именно название
по которому получается GUID, а после вызова окна Referens строится список
всего используя реестр и нужные отмечаются флажком :), ну а после висит в
кеше, т.к. о перезапуске Екселя не говорилось, и в первом варианте просто
использовался файл без открытия Referens.



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145611
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, как я сейчас понимаю, посмотрев реестр, происходит следующим , довольно происходит образом :
- Когда я первый раз пускал старое XLS приложение, то , чтобы DLL' из его ссылки его работала , я просто инсталлировал его в систему, т.е. просто сделал для его работы регистрацию СТАРОЙ версии DLL'ки с помощью regsvr32 <....dll>
Т.о. в реестре оказался старый GUID.
- после я брал исходники DLL' ки и каким-то образом сейчас уже не понять компилил их , но при этом в реестре оказывалась НОВАЯ версия DLL'ки с ее новым GUID, ПРИЧЕМ старый почему-то НЕ ЗАМЕНИЛСЯ.
Т.о. у меня в реестре имеются две версии DLL c двумя GUID, ссылающимися на один файл DLL'ки, поскольку логически интерфейсы совместимы, то XLS приложение, ссылаясь на старый GUID, продолжало нормально работать, но как только я менял в нем ссылку , происходила смена GUID'а , который после перекомпиляции меняясь в реестре и не позволял работать XLS'.

Вот только вопрос возникает - как возможно так зарегестировать DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать его и получить при этом дубликатный новый GUID для этой DLL ?
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145616
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kefi
> Вот только вопрос возникает - как возможно так зарегестировать
> DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать
> его и получить при этом дубликатный новый GUID для этой DLL ?

А как ты думаешь о чем был первый пост Бенедикт?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145630
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще :
т.е. получается, что приложение имеющее ссылку с данным GUID на DLL'ку будет продолжать нормально работать, даже если эта DLL' ка заменится причем без переригистрации (в результате апгрейда например) новой с новым GUID ?
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145639
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос
> Автор: kefi
> Вот только вопрос возникает - как возможно так зарегестировать
> DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать
> его и получить при этом дубликатный новый GUID для этой DLL ?

А как ты думаешь о чем был первый пост Бенедикт?


не знаю.
я думаю, что в ЛЮБОМ режиме компимляции, не должно оставаться дубликатных (старых) GUID, они при несовместимости должны заменяться новыми, не оставляя старых следов .
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145641
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kefi
> Вот только вопрос возникает - как возможно так зарегестировать
> DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать
> его и получить при этом дубликатный новый GUID для этой DLL ?

Да и ещё, при развитии функционала твоей ДЛЛ может возникнуть ситуация когда
VB скажет что сохранить бинарную совместимость не получится, это когда у
существующей функции изменишь параметры(количесто или тип)
останови компиляцию, разрегистрируй старую, сделай project compatibility
сделай компиляцию, и снова установи binary compatibility, дабы не
повторялась такая ситуация в будущем :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145669
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kefi
> Игорь Горбонос
>
> > Автор: kefi
> > Вот только вопрос возникает - как возможно так
> зарегестировать
> > DLL'ку, чтобы открыв впоследствии ее проект, можно было
> перекомпилировать
> > его и получить при этом дубликатный новый GUID для этой DLL ?
>
> А как ты думаешь о чем был первый пост Бенедикт?
>
> не знаю.
Он был как раз об этом, что нужно сделать(кроме оплаты налогов :) ) что-бы
спать спокойно

> я думаю, что в ЛЮБОМ режиме компимляции, не должно оставаться
> дубликатных (старых) GUID, они при несовместимости должны заменяться
> новыми, не оставляя старых следов .

С каких это делов так должно быть? А как определить что это твой старый
GUID?
Почитай книжки по теме, если уж взялся писать СОМ объекты

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145691
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос
С каких это делов так должно быть? А как определить что это твой старый
GUID?
А определить просто - в проекте-то он старый до компиляции. Что ж, теперь каждая компиляция будет бросать в реестре старый GUID и делать новый дубликатный ?
так что не надо о налогах, они здесь ни при чем.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145695
kefi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kefiЕще :
т.е. получается, что приложение имеющее ссылку с данным GUID на DLL'ку будет продолжать нормально работать, даже если эта DLL' ка заменится причем без перерегистрации (в результате апгрейда например) новой с новым GUID ?
мда рано обрадовался - без перегистрации не удается. Классы не распознаются в новой незарегестрированной библиотеке.
...
Рейтинг: 0 / 0
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
    #35145741
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: kefi
> Игорь Горбонос
> С каких это делов так должно быть? А как определить что это
> твой старый
> GUID?
>
> А определить просто - в проекте-то он старый до компиляции.

А где ты его видишь в проекте? ;-)
Даже если так, ты сделал инсталяционный пакет и для пробы сделал установку
на своей машине и твой GUID будет указывать на другую ДЛЛ чем в проекте :) и
спустя какое-то время нужно что-то доработать как эту ситуацию разрулить?

> Что ж, теперь каждая компиляция будет бросать в реестре старый GUID и
> делать новый дубликатный ?

Смотря как компилировать, у меня ни какая ничего не бросает где не попадя :)

> так что не надо о налогах, они здесь ни при чем.

А о чем ещё поговорить? Если ты писатель, а не читатель. :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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