Восстанавливая COM DLL, мне нужно беспокоиться о GUID? - PullRequest
2 голосов
/ 02 сентября 2010

Изменение должно быть сделано в DLL. DLL изначально была закодирована в VB6 (не мной), а исходный код потерян.

Он очень прост по своей функциональности, поэтому я воссоздал его с нуля, но у меня есть доступ только к VB Express 2008.

Сначала я создал ее как обычную DLL, а потом понял, что это должна быть COM DLL. К счастью, отличная статья в http://www.codeproject.com/KB/COM/nettocom.aspx рассказывает мне, как.

Но я ничего не знаю о GUID ...

Должен ли я использовать тот же GUID, что и исходная DLL, или нет? Имеет ли это какое-то значение?


Редактировать: действительно ли это действительно имеет значение, поскольку это COM DLL? Он вызывается элементом управления Active X, и я не вижу ссылки на веб-странице на GUI ... (но я просто n00b, так что я знаю?; -)

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

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

Помните, что двоичная совместимость обязательна для повторного использования GUID. Если вы нарушаете какой-либо интерфейс - измените его идентификатор и идентификатор класса, реализующего его, и перекомпилируйте клиент.

1 голос
/ 02 сентября 2010

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

Более чистый подход заключается в создании нового GUID и изменении вызывающего абонента для использования нового GUID / DLL.

...