- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
查看由 CCW 创建的生成的 TLB 文件,尽管 OLE/COM 对象查看器显示 IID 保持不变,除非我更改接口(interface)的设计(这是正确的行为),我担心的是,如果我在尽管接口(interface)没有改变,但另一台机器将生成完全不同的 IID,从而破坏现有的 COM 客户端。
最佳答案
类型的 guid 并非特定于 COM 互操作,所有 .NET 类型都有一个 guid。您可以从 Type.GUID 属性获取它。生成它的 CLR 中的代码可从 SSCLI20 发行版中获取。您可以通过查看 clr/scr/vm/methodtable.cpp MethodTable::GetGuid() 方法中的代码来了解该算法。
算法总结:
这些信息足以回答您的问题:
How are the COM Interface IDs generated by the COM Callable Wrapper?
它使用通过上述算法生成的 Type.GUID。算法中的所有元素都不是特定于执行该算法的机器的,因此您不必担心在不同的构建机器上获得不同的 IID 和 CLSID。
How does the CCW know if the interface has changed and needs to generate a new IID?
事实并非如此。它完全依赖于为不同接口(interface)定义生成不同 GUID 的算法。
Would it be safer to just generate my own and declare in the source file?
不是真的。该算法没有记录的故障模式。使用您自己的 [Guid] 属性会显着增加您在必要时忘记更改它的可能性。这是一个经常使用的快捷方式,也是 DLL Hell 的主要来源。令人讨厌的那种,会让客户端崩溃并且几乎无法诊断硬件异常的那种。与仍然困难但并非不可能的 E_NOINTERFACE 相反。我能想到的依靠自动生成的 Guid 确实只有两个缺点:当您忘记在重建程序集之前取消注册程序集时,它往往会导致开发计算机上的注册表污染。当您排除 COM 错误时,它会降低您的速度,因为您不太了解这些指南。诚然,注册表污染对我来说已经是足够的理由了。
关于.net - .NET COM Callable Wrapper 如何生成 IID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6563714/
我的代码曾经可以工作。它做到了: import iid from '@react-native-firebase/iid'; ... tokenDevice = await iid().getTo
我的手机设备出现此错误。我已经启用了钥匙串(keychain)功能,但它不起作用。 在第一次启动应用程序时,fcm sdk 返回 token ,但在断开连接并重新连接后,Api 在 token 中返回
当我使用来自 microsoft docs to migrate to winrt from cx 的辅助函数时,这个错误发生在我身上.我看到一个类似的问题 here ,但提到的解决方案似乎对我不起作
我正在编写与 Firefox 3.0 到 3.6 版本兼容的 Firefox 扩展。 我正在使用 nsIDOMNSHTMLElement 接口(interface)指针来设置 html 元素的内部文本
我有一个树状 View ,并已将一些数据插入其中,如下所示。 self.tree.insert('', 'end', iid="test1", text="test a", values=("data
我有一个树状 View ,并已将一些数据插入其中,如下所示。 self.tree.insert('', 'end', iid="test1", text="test a", values=("data
这个问题在这里已经有了答案: Failed to resolve: com.google.firebase:firebase-core:16.0.1 (14 个回答) 关闭3年前。 This is S
我正在使用 tkinter,特别是 ttk.treeview 小部件来显示元组。我做了很多插入操作,想知道 iid(项目标识符)是否会溢出或如何处理。我假设最大 iid 为 0xFFF,相当于 409
查看由 CCW 创建的生成的 TLB 文件,尽管 OLE/COM 对象查看器显示 IID 保持不变,除非我更改接口(interface)的设计(这是正确的行为),我担心的是,如果我在尽管接口(inte
我想通过 firebase 发送通知。当我发送通知时,我的应用程序崩溃,在 logcat 中显示这种类型的堆栈跟踪: java.lang.RuntimeException: Unable to in
我正在尝试在 R 中运行 rjags(通过 Rstudio)来估计以下模型的参数 alpha&beta 和超参数 tau.nu: y_i|x_i~pois(eta_i), eta_i=exp(alph
我的应用程序集成了 FCM 以接收推送通知并且运行正常。但是,我面临的问题是安装时它会随机崩溃。它是非常随机的,并且发生在 OS 6.0+ 设备上,直到最新但随机发生。 代码方面,在服务类中只显示通知
精简版 如何在使用 IMetadataImport 时从 *.winmd 文件获取接口(interface)的接口(interface)标识符 (IID)? 例如Windows.Globalizati
请帮助解决此错误 apply plugin: 'com.android.application' android { 编译版本28 defaultConfig { applicationId“com.
在尝试托管 CLR 时,我不断收到以下消息: error C2440: 'function' : cannot convert from 'const IID' to 'DWORD' 我的代码: IC
Here是一些使用 windows.gaming.input.h API 的原始 C 代码: HSTRING gamepadClassName; if (FAILED(WindowsC
在尝试托管 CLR 时,我不断收到以下信息: error C2440: 'function' : cannot convert from 'const IID' to 'DWORD' 我的代码: IC
如何在不知道它实现的任何接口(interface)的情况下通过类的 CLSID 创建类的实例。 例如,CLSID "{3ad05575-8857-4850-9277-11b85bdb8e09}" 实现
我制作了一个 Android 插件以在我的 Unity 应用程序中使用 GCM。当我尝试启动 RegistrationIntentService(来自 Android 开发人员手册网站的现成示例类)时
我正在编写一个应将推送通知从服务器发送到 Android 和 iOS 设备的应用程序。为此,我尝试使用 FCM。iOS 应用程序使用 APNS,因此我可以在服务器端获取 apns 订阅 token 。
我是一名优秀的程序员,十分优秀!