作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的项目中,我们在我们的 asp.net 应用程序中通过 COM 重用了很多 Delphi 代码。
像这样:legacy delphi dll => delphi COM wrapper => .Net interop => asp.net (mvc)
我们在访问冲突、dll 卸载等方面存在一些问题......我现在已经移植了一些以直接通过 P/Invoke 代码使用旧版 dll。
当我查看有关 COM 和 P/Invoke 的资源时,人们几乎总是建议使用 COM。这是为什么? P/Invoke 没有以下好处:
最佳答案
PInvoke 是一个非常好的工具,但它肯定不能替代 COM。 PInvoke 仅支持具有 C 语法的简单函数; COM 允许您实现对象模型。参加 Microsoft.Office.Interop
中的类(class)例如命名空间——它们都是没有包装器的纯 COM 类。使用 PInvoke 进行 Office 互操作将非常痛苦。
PInvoke 的另一个核心问题是,编写声明通常是客户端程序员的负担——最不可能让他们正确的人。 COM 作者可以发布自动生成的类型库,就像 .NET 程序集中的元数据一样,极大地消除了出错的可能性,并且客户端程序员无需在 Project > Add Reference 之外进行任何工作。
解决你的子弹:
yourapp.exe.local
的空文件。Isolated
对 True
的引用的属性.IDispatch
进行后期绑定(bind) COM 调用可能会产生额外费用。 ;这与使用反射进行调用的成本大致相同。关于.net - 为什么 COM 互操作优先于 .NET 中的 P/Invoke?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929164/
我是一名优秀的程序员,十分优秀!