c# - 在 C# COM 项目中,我应该引用 DLL 还是 TLB?(主要是SolidWorks)
问题描述
我正在为 SolidWorks 构建一个 C# 插件,但我似乎找不到任何关于在我的项目中引用哪些文件的明确答案。我.DLL
在以前的项目中使用过 s,.TLB
在这个项目中使用过 s。特别是对于 SolidWorks,我更喜欢 TLB,因为函数的定义提供了它们的实际返回类型,而不是仅仅dynamic
为了让我不必在 SolidWorks 的文档中查找它。然而,在我发现的所有视频和网站中,似乎没有人使用 TLB。SolidWorks 的文档站点没有那么有用,因为它到处都是,而且解释也很乏味。
Early and Late Binding文档说 TLB 仅用于早期绑定。
这里的这个页面说 TLB 用于 C++/CLI、VB .NET 和 VBA。没有提到C#。这另一页(现在找不到)显示了使用 TLB 而不是 DLL 的代码,但其他人似乎都在使用 DLL。
我实际上应该使用什么?除了早期/晚期绑定和之外,有什么区别(对于 SolidWorks 和一般 COM 东西)dynamic
?
解决方案
添加 tlb 时,它会在后台转换为互操作 dll,因此它与添加 dll 几乎相同,但有一个主要区别。这些互操作不会有强名称,因此您将来可能会遇到兼容性问题,这与强签名的 dll 互操作不同。
我还建议不要使用“嵌入互操作类型”选项。在这种情况下,您将没有动态并且可以使用方法的 I 版本来访问 API 的类型安全版本。
作为总结:添加互操作 dll(从 .NET 选项卡),将所有 SOLIDWORKS 互操作的“嵌入互操作类型”选项设置为 False
推荐阅读
- ios - 为特定用户名添加 NSUserDefaults
- html - React Router 在 bluehost 上给了我 404 错误
- airflow - 在 DAG 中执行算子实例之前执行代码块
- android - 在Android中打开默认文件夹路径?
- html - 调整文本框的高度
- java - 在 ArrayList 中查找最低的 8 个值并在 TextView 中突出显示这些值
- tensorflow - Tensorflow.js 中预测的输出总是显示第一个示例
- css - Woocommerce 产品描述在页面顶部重复两次
- javascript - 如果数据中的值为零,chart.js 工具提示不会出现
- azure - reportRoot: getSharePointActivityUserDetail 用户主体名称(返回为 GUID)是什么意思?