|
|
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Беру из архивов свой старый XLS' ский файл со ссылкой на мою VB DLL'ку. Он работает нормально. Перестраиваю эту DLL'ку. Он работает нормально. Перепривязываю в нем эту DLL'ку.( след образом : Tools\Refreneces\ отключаю OK, Tools\Refreneces\ подключаю OK ) Перестраиваю эту DLL'ку. Он при запуске пытаясь использовать одну из функций этой DLL'ки и говорит, что DLL'ка не найдена. Смотрю в ссылках - напротив нее встало Missing Как-то можно избавиться от этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 14:10 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefi, попробуй компилировать с опцией 'Binary Compatibility'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 14:38 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Так ссылки не следают, но мне-то прежде всего интересно : ПОЧЕМУ так происходит в описанной мной ситуации ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:21 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Как это не слетают? "Missing" - это именно слетают. ПОТОМУ, что GUID (LIBID) стал другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:35 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
2 Бенедикт > Внимательно прочтите первый описанный мной вариант. Нет , лучше еще раз : 1 вариант : Беру из архивов свой старый XLS' ский файл со ссылкой на мою VB DLL'ку. Он работает нормально. Перестраиваю эту DLL'ку. Без всякой совместимости Он работает нормально. НЕТ слетевших ссылок . Вопрос - Почему ? 2 вариант : Перепривязываю в нем эту DLL'ку.( след образом : Tools\Refreneces\ отключаю OK, Tools\Refreneces\ подключаю OK ) Перестраиваю эту DLL'ку. Он при запуске пытаясь использовать одну из функций этой DLL'ки и говорит, что DLL'ка не найдена. Смотрю в ссылках - напротив нее встало Missing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:43 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
> Автор: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:05 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
2 Игорь Горбонос > А ты уверен, что он работает с ЭТОЙ версией твоей ДЛЛ? Найди все пути в реестре и сравни GUID'ы, и тогда говори что уверен. На компьютере просто НЕТ другой такой. Вообще-то лучше использовать такой вариант: В каком смысле лучше ? Для моих целей лучше понять именно то , что я спрашиваю. Почему это происходит тебе уже писали, ещё советую обратится к "Сущность технологии СОМ" Д. Бокс. Отпадут практически все вопросы :) Так если уже писали, зачем же ты опять об этом ? а насчет книжки, то не написана еще такая, чтоб все вопросы отпали, и вряд ли напишут когда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:14 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefi, 1) Каюсь, просмотрел. Непонятно (в общем). И много факторов, которые могут влиять (включая историю изменений библиотеки, мусор в реестре, и просто случайность). Могу только предполагать. Например: код в нетронутом старом XLS находится в откомпилированном состоянии, а новая версия библиотеки (случайно или неслучайно) двоично совместима, по крайней мере, в той части интерфейсов, что используются. (Здесь скрытый вопросы, а не обновляет ли VBA ссылки при запуске и не перекомпилирует ли в случае обновления ссылки VBA проект; предположим, что обновляет - делает вызов QueryPathOfRegTypeLib(), обламывается, поскольку сменился LIBID, делает вызов LoadTypeLib() или RegisterTypeLib(), это прокатывает, поскольку файл библиотеки есть; перекомпиляции VBA проекта, однако, не происходит. Сплошные спекуляции...) 2) Здесь ошибка в последовательности действий: надо отключить, (разрегистрировать,) перекомпилировать (происходит автоматическая регистрация), подключить. Иначе получается, что подключили одну библиотеку, а используем другую. А поскольку "дёргали" XLS (точнее, проект VBA), код перекомпилировался под предыдущую версию библиотеки (т.е. имеем три (или более) версии одной вроде бы библиотеки(?)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:15 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefiНа компьютере просто НЕТ другой такой.Библиотека идентифицируется не именем модуля (исполняемого файла). Вот о чём тебе толкуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:17 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Точнее, и им тоже; но во вторую очередь. Это IMHO. Если у кого-то есть ссылка на официальную информацию, как VBA проверяет и обновляет Reference-ы, и делает ли перекомпиляцию проекта в случае обновления, прошу поделиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:21 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Что интересно : в старом XLS файле стоят ссылки на DLL с другим GUID, чем имеющийся в моей системе, НО этот XLS работает с имеющимся GUID (версии DLL действительно фактически совместимы, но GUID у них разные, т.к. копилились в режиме несовместимости) причем даже, если (см вариант1) эту DLL в режиме несовместимости перекомпилять сколь угодно раз, все - равно ССЫЛКИ в этом XLS (кстати не только в этом , вообще вов всех моих c 2005 года XLS файлах) НЕ СЛЕТАЮТ. И начинают эти ссылки после перекомпиляции слетать именно после того, как я перепривяжу их в XLS'ке. А насчет того - как нужно делать правильно, так меня волнует несколько другое, - а именно как понять , что происходит, меня то как раз интересовал бы вариант, когда я перекомпилировал свою DLL, а у пользователей (они же имеют старые XLS приложения со старыми ссылками) эти ссылки бы не слетали. Поэтому задача сейчас как раз понять - что происходит. Т.е. - почему после перепривязки, или просто в новом XLS файле после привязки ссылки начинают слетать после компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:42 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Бенедикт kefiНа компьютере просто НЕТ другой такой.Библиотека идентифицируется не именем модуля (исполняемого файла). Вот о чём тебе толкуют. а я в ответ толкую, что не может быть использована другая версия, если ее физически нет в системе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:44 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Бенедикт Если у кого-то есть ссылка на официальную информацию, как VBA проверяет и обновляет Reference-ы, и делает ли перекомпиляцию проекта в случае обновления, прошу поделиться. Так мой старый XLS работает без изменений , - сохраняю ли я его , причем GUID в нем НЕ МЕНЯЕТСЯ при этом(о чем горворит activeworkbook.VBProject.References(9).Guid). И этот GUID, не совпадающий с GUID текущей DLL'ки (которую я могу перекомпилять много раз) нормально позволяет работать , Т.е. вроде как НЕТ никакой перекомпиляции при открытии XLS приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:16 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefi, Библиотека типов, за которой VBA и лезет в DLL (она там лежит в виде ресурса) нужна на этапе компиляции ранне-связанного кода (ну, и редактирования, чтобы нажав точку, увидеть список методов). В откомпилированном коде идёт обращение к 5-му методу в таблице виртуальных методов объекта, а не к методу с именем "MyCoolMethod", т.е. информация из библиотеки типов не нужна (грубо). Соответственно, это может быть источником проблемы, если что-то в интерфейсе поменялось (это я ересь говорю с точки зрения COM - если интерфейс поменялся, то это другой интерфейс). Для того, чтобы создать экземпляр объекта, надо знать его CLSID (ещё один GUID). Узнать его можно из ProgID - дружественного для человека имени, например, "Excel.Application". Ведь когда ты пишешь Set xlApp = CreateObject("Excel.Application"), ты ведь не задумываешься сильно, что на клиентской машине может стоять другая версия Excel, чем у тебя. То, что другой версии нет в системе, это не значит, что программа автоматически перестаёт работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:21 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefiИ этот GUID, не совпадающий с GUID текущей DLL'ки (которую я могу перекомпилять много раз) нормально позволяет работатьВопрос - а если разрегистрировать DLL, переместить её в другой каталог, и снова зарегистрировать, позволяет? kefiТ.е. вроде как НЕТ никакой перекомпиляции при открытии XLS приложения.Компиляцию сколь-нибудь большого проекта было бы видно на глаз, да и файл бы изменился, если б она происходила. Но это тоже - "вроде". Хочется увидеть формальное описание от производителя или эксперта: что, в какой момент, по какому алгоритму, в какой версии продукта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:33 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
> Автор: Бенедикт > kefi > И этот GUID, не совпадающий с GUID текущей DLL'ки (которую я > могу перекомпилять много раз) нормально позволяет работать > Вопрос - а если разрегистрировать DLL, переместить её в другой > каталог, и снова зарегистрировать, позволяет? Я думаю позволит т.к. пока не трогать Referens используется именно название по которому получается GUID, а после вызова окна Referens строится список всего используя реестр и нужные отмечаются флажком :), ну а после висит в кеше, т.к. о перезапуске Екселя не говорилось, и в первом варианте просто использовался файл без открытия Referens. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:55 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Короче, как я сейчас понимаю, посмотрев реестр, происходит следующим , довольно происходит образом : - Когда я первый раз пускал старое XLS приложение, то , чтобы DLL' из его ссылки его работала , я просто инсталлировал его в систему, т.е. просто сделал для его работы регистрацию СТАРОЙ версии DLL'ки с помощью regsvr32 <....dll> Т.о. в реестре оказался старый GUID. - после я брал исходники DLL' ки и каким-то образом сейчас уже не понять компилил их , но при этом в реестре оказывалась НОВАЯ версия DLL'ки с ее новым GUID, ПРИЧЕМ старый почему-то НЕ ЗАМЕНИЛСЯ. Т.о. у меня в реестре имеются две версии DLL c двумя GUID, ссылающимися на один файл DLL'ки, поскольку логически интерфейсы совместимы, то XLS приложение, ссылаясь на старый GUID, продолжало нормально работать, но как только я менял в нем ссылку , происходила смена GUID'а , который после перекомпиляции меняясь в реестре и не позволял работать XLS'. Вот только вопрос возникает - как возможно так зарегестировать DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать его и получить при этом дубликатный новый GUID для этой DLL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:56 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
> Автор: kefi > Вот только вопрос возникает - как возможно так зарегестировать > DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать > его и получить при этом дубликатный новый GUID для этой DLL ? А как ты думаешь о чем был первый пост Бенедикт? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:58 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Еще : т.е. получается, что приложение имеющее ссылку с данным GUID на DLL'ку будет продолжать нормально работать, даже если эта DLL' ка заменится причем без переригистрации (в результате апгрейда например) новой с новым GUID ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:03 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: kefi > Вот только вопрос возникает - как возможно так зарегестировать > DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать > его и получить при этом дубликатный новый GUID для этой DLL ? А как ты думаешь о чем был первый пост Бенедикт? не знаю. я думаю, что в ЛЮБОМ режиме компимляции, не должно оставаться дубликатных (старых) GUID, они при несовместимости должны заменяться новыми, не оставляя старых следов . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:07 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
> Автор: kefi > Вот только вопрос возникает - как возможно так зарегестировать > DLL'ку, чтобы открыв впоследствии ее проект, можно было перекомпилировать > его и получить при этом дубликатный новый GUID для этой DLL ? Да и ещё, при развитии функционала твоей ДЛЛ может возникнуть ситуация когда VB скажет что сохранить бинарную совместимость не получится, это когда у существующей функции изменишь параметры(количесто или тип) останови компиляцию, разрегистрируй старую, сделай project compatibility сделай компиляцию, и снова установи binary compatibility, дабы не повторялась такая ситуация в будущем :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:07 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
> Автор: kefi > Игорь Горбонос > > > Автор: kefi > > Вот только вопрос возникает - как возможно так > зарегестировать > > DLL'ку, чтобы открыв впоследствии ее проект, можно было > перекомпилировать > > его и получить при этом дубликатный новый GUID для этой DLL ? > > А как ты думаешь о чем был первый пост Бенедикт? > > не знаю. Он был как раз об этом, что нужно сделать(кроме оплаты налогов :) ) что-бы спать спокойно > я думаю, что в ЛЮБОМ режиме компимляции, не должно оставаться > дубликатных (старых) GUID, они при несовместимости должны заменяться > новыми, не оставляя старых следов . С каких это делов так должно быть? А как определить что это твой старый GUID? Почитай книжки по теме, если уж взялся писать СОМ объекты Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:19 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос С каких это делов так должно быть? А как определить что это твой старый GUID? А определить просто - в проекте-то он старый до компиляции. Что ж, теперь каждая компиляция будет бросать в реестре старый GUID и делать новый дубликатный ? так что не надо о налогах, они здесь ни при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:25 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefiЕще : т.е. получается, что приложение имеющее ссылку с данным GUID на DLL'ку будет продолжать нормально работать, даже если эта DLL' ка заменится причем без перерегистрации (в результате апгрейда например) новой с новым GUID ? мда рано обрадовался - без перегистрации не удается. Классы не распознаются в новой незарегестрированной библиотеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:27 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
> Автор: kefi > Игорь Горбонос > С каких это делов так должно быть? А как определить что это > твой старый > GUID? > > А определить просто - в проекте-то он старый до компиляции. А где ты его видишь в проекте? ;-) Даже если так, ты сделал инсталяционный пакет и для пробы сделал установку на своей машине и твой GUID будет указывать на другую ДЛЛ чем в проекте :) и спустя какое-то время нужно что-то доработать как эту ситуацию разрулить? > Что ж, теперь каждая компиляция будет бросать в реестре старый GUID и > делать новый дубликатный ? Смотря как компилировать, у меня ни какая ничего не бросает где не попадя :) > так что не надо о налогах, они здесь ни при чем. А о чем ещё поговорить? Если ты писатель, а не читатель. :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:59 |
|
||
|
В Office'ных приложениях Слетают ссылки на DLL после ее перекомпиляции
|
|||
|---|---|---|---|
|
#18+
kefi, Для информации. Вот вроде неплохая статья: http://www.visibleprogress.com/vb_binary_compatibility.htm . Правда, в ней утверждается, что VB сам шерстит реестр, и ориентируется на дружественное имя библиотеки типов в первую очередь. Я в этом не уверен. Ещё: http://www.vb-build.com/BinaryCompatibility.htm . А мусор в реестре может накапливаться весьма быстро и "сам собой". Я как то разгребал записи от 14 версий своей же библиотеки :) "Следи за собой, будь осторожен" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2162678]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 362ms |

| 0 / 0 |
