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

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

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

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

2 вариант :
Перепривязываю в нем эту DLL'ку.( след образом :
Tools\Refreneces\ отключаю OK, Tools\Refreneces\ подключаю OK )
Перестраиваю эту DLL'ку.
Он при запуске пытаясь использовать одну из функций этой DLL'ки и говорит, что DLL'ка не найдена. Смотрю в ссылках - напротив нее встало Missing
...
Рейтинг: 0 / 0
20.02.2008, 17:05
    #35145181
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
> Автор: 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
20.02.2008, 17:14
    #35145227
kefi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
2 Игорь Горбонос >
А ты уверен, что он работает с ЭТОЙ версией твоей ДЛЛ? Найди все пути в
реестре и сравни GUID'ы, и тогда говори что уверен.

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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