Можно ли заменить ранне связанный модуль - PullRequest
1 голос
/ 12 мая 2011

с новым кодом, написанным на другом языке, если интерфейс / GUID / и т. Д. Совпадают?

Я пытаюсь сделать это, как описано в сообщении двоюродного брата:

Замена устаревшего приложения VB6

Но я думал, что перейду в погоню.

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Динамический не поможет в этом случае, так как вы говорите о приложении VB6, ссылающемся на COM-компонент, который был в VB6 (или что-то еще), но вы СЕЙЧАС хотите быть VB.net (или C #).

Тем не менее, вы должны быть в состоянии сделать это.

Вам потребуется использовать OLEView (или что-то похожее) для генерации MIDL для COM DLL, которую вы заменяете. Это даст вам конкретные GUIDS для всех классов и интерфейсов, определенных в этой DLL.

Затем вам нужно будет закодировать вашу версию DLL .net, указав КАЖДЫЙ ОДИН ГИД для КАЖДОГО класса и интерфейса.

Вы захотите посмотреть документы для атрибутов .net:

ComVisible Guid InterfaceType

и, возможно, еще несколько. Эти атрибуты позволяют вам специально указывать, какие GUIDS использовать для каких объектов и интерфейсов в вашей dll.

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

1 голос
/ 12 мая 2011

Вы можете использовать C # 4.0 dynamic для решения многих из таких проблем с проблемами, связанными с COM.

dynamic объекты и дополнительные параметры были введены для облегчения некоторых из этих проблем.

...