gpt4 book ai didi

.net - GuidAttribute & ProgId,它们有什么用?

转载 作者:行者123 更新时间:2023-12-01 08:31:45 24 4
gpt4 key购买 nike

所以我正在使用 NetOffice 创建一个 Outlook 插件。

在插件入口点它有这样的东西:
[GuidAttribute("d7066ab2-ac03-431a-bea5-b70d3efab2a5"), ProgId("OutlookPlugin"), ComVisible(true)]
现在我明白了ComVisible bit 将库设置为 ComVisible。我认为这是为了我可以通过程序集信息 -> 使程序集 COM-Visible 使单个类 ComVisible 而不是整个库。

但我不明白 GuidAttributeProgId用于?

最佳答案

COM 的一个重要特性是应用程序可以要求创建类对象,COM 会挑选出实现它的可执行文件并为您加载它。这需要一个很好的方法来识别组件。

你会说:“好吧,没问题,只是给它一个名字”。问题是,人们不太擅长取好名字。有一大群人叫“汉斯”,我知道至少还有一个人跟我的名字一样。住在某个地方是荷兰,不知道他是谁。

这是一个问题,与人名不同,组件名冲突是致命的。您将加载完全错误的组件,并且您的程序将崩溃。因此 COM 设计者决定唯一好的解决方案是全局唯一 ID,这个数字保证在整个已知宇宙中都是唯一的,甚至更远。一个 GUID。

COM 应用程序使用该编号来请求创建对象。底层api函数为CoCreateInstance ,第一个参数是 CLSID,它是标识类的 guid。

然而,人们不太擅长记住很长的数字。所以有一种识别组件的备用方法,它特别用于脚本语言。那种以可靠的方式获取该 guid 值的运行时环境并不那么容易。所以仍然有一个名字附加到号码上。它是 ProgId。您将它传递给一个通常名为 CreateObject() 的辅助函数。它多出了一步,它使用了 CLSIDFromProgID()帮助函数将名称映射到数字,然后调用 CoCreateInstance。不用说,这有时会并且确实会出错。

关于.net - GuidAttribute & ProgId,它们有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354477/

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