В проектах C # COM я должен ссылаться на DLL или TLB?(В основном SolidWorks) - PullRequest
1 голос
/ 26 мая 2019

Я создаю надстройку C # для SolidWorks и, похоже, не могу найти однозначного ответа относительно того, какие файлы будут ссылаться в моем проекте. Я использовал .DLL s в предыдущих проектах и ​​.TLB s в этом. В частности, для SolidWorks мне больше понравились TLB, потому что определения функций снабжены их реальными типами возвращаемых значений, а не просто dynamic, так что мне не нужно искать его в документах SolidWorks. Тем не менее, на всех видео и сайтах, которые я нашел, похоже, никто не использует TLB. Документальный сайт SolidWorks не так полезен, так как он повсюду, а объяснения очень тусклые.

Документы для Раннее и позднее связывание говорит, что TLB предназначены только для раннего связывания.

На этой странице говорится, что TLB предназначены для C ++ / CLI, VB .NET и VBA. Нет упоминания о C #. На этой другой странице (не могу найти ее прямо сейчас) показан код с использованием TLB вместо DLL, но все остальные, похоже, используют DLL.

Что я на самом деле должен использовать? Каковы различия (для SolidWorks и для общих компонентов COM), кроме раннего / позднего связывания и dynamic?

1 Ответ

1 голос
/ 05 июня 2019

Когда вы добавляете tlb, он преобразуется в dll взаимодействия за кулисами, так что это почти то же самое, что и добавление dll, но есть одно существенное отличие. Эти взаимодействия не будут иметь строгих имен, поэтому у вас могут возникнуть проблемы с совместимостью в будущем, в отличие от dll-операций со строгой подписью.

Я бы также рекомендовал не использовать опцию «Вставить типы взаимодействия». В этом случае у вас не будет динамики и вы можете использовать I-версии методов для доступа к безопасным версиям API-интерфейсов.

В качестве резюме: добавьте dll взаимодействия (из вкладки .NET), установите для параметра «Встраивать типы взаимодействия» значение False для всех операций SOLIDWORKS

...