gpt4 book ai didi

.net - "Register for COM Interop"与 "Make assembly COM visible"

转载 作者:行者123 更新时间:2023-12-01 19:58:38 25 4
gpt4 key购买 nike

这两个选项之间的真正区别是什么?我所知道的是:

注册 COM Interop
此选项在程序集上执行 regasm,并将程序集注册为注册表中的 COM 组件(也可能不是),以及所有类似 COM 的注册表项。这一步会生成TLB文件吗?还做了什么?

有时我看到编译项目时生成了tlb,但有时却没有,这是为什么?

使程序集 COM 可见
这对大会有什么影响?如果我在此程序集中具有以下类型,即使我的类型被标记为 ComVisible,我是否仍需要指定“使程序集 COM 可见”?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}

最佳答案

“使程序集 COM 可见”是一把大锤,可以使程序集中的所有类型成为公共(public)类型 [ComVisible]。很少需要的是,您将需要选择您想要可见的特定类型,就像您在代码片段中所做的那样。

程序集生成后,需要对其进行注册,以便 COM 客户端可以找到它。它只使用一个数字来标识他想要创建的对象,GUID,需要额外的查找来找出哪个 DLL 实现了它。注册涉及在注册表的 HKLM\Software\Classes\CLSID\{guid} 部分写入 key 。您可以通过运行 Regasm.exe/codebase/tlb 自己完成此操作,也可以将其留给构建系统在构建程序集后自动完成。

这就是“注册 COM 互操作”的作用。这是可取的,因为它可以确保 DLL 的旧副本在被覆盖之前自动取消注册,从而防止注册表污染。 VS 需要提升运行权限才能对这些注册表项进行写访问,这是使其成为可选的原因之一。或者您只是不想注册它,这在构建服务器上很常见。我无法评论为什么您有时在没有更多诊断的情况下无法获得 .tlb。

关于.net - "Register for COM Interop"与 "Make assembly COM visible",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com