- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所有问题都与.net Framework 2.0中的.net项目dll有关,该dll将自身公开为COM。
1)如果我们在源代码(typelib,类,接口)中未指定任何GUID,那么谁在生成GUID?编译还是高潮?
2)GUID值存在于dll,tlb或两个文件中吗?
3)任何具有相同源代码的开发人员都会在其生成或运行重装的机器上独立生成完全相同的GUID?
4)如果我通过现有的dll和tlb文件运行regasm,如果dll和tlb不匹配怎么办? Regasm使用最新元素和GUID重新生成tlb文件吗?还是将TypeLib注册到当前的tlb文件?
5)使用dll和tlb参数设置运行regasm有什么意义?
Tlb文件是部署内容的一部分,还是最佳做法是仅部署dll,让regasm即时生成tlb?
6)最后一个问题,真的需要tlb吗?拥有tlb文件有什么意义?并非所有信息都已在注册表中?它提供了什么额外的信息?
7)在注销时,我们需要提供什么? dll文件? Tlb?都?如果dll(或tlb)与现有的reg条目不匹配怎么办?如果已经使用tlb选项注册,但我只运行dll的regasm unregister,它也会删除TypeLyb条目吗?
8)关于位,再充气也总是在SysWow64下生成条目吗? Framework64下的重做与Framework下的重做一样吗?
最佳答案
类型库与.NET元数据完全等效。它对客户端程序员最重要的是,它使编译器和IDE对您的库更加智能。提供自动完成和语法检查,因此他的代码与您的代码不匹配的几率很小。注册步骤是必需的,以便可以找到您的文件。类型库通常作为资源嵌入在DLL本身中,就像.NET元数据一样,但是.NET构建模型并不容易做到。客户端编译器使用类型库信息来生成适当的COM调用。指导很重要,因为这是客户端编译器需要使用的,标识符名称不起作用。有一种方法可以使用使用名称的“后期绑定”,这与.NET中的Reflection完全等效,但是不涉及类型库。
谁在生成GUID?
CLR可以。每个.NET接口或类都有一个,无论它是[ComVisible(true)]。也通过Type.GUID属性公开。如果您没有在类型上使用[Guid]属性,则它将运行一种算法来生成Guid,该Guid将类型声明用作输入。换句话说,如果您对类型进行了任何更改,则可以确保Guid的值将有所不同。这是您永远不要使用[Guid]属性的基本原因,除非您必须创建精确的直接替换并且不能重新编译客户端代码。 TLBID来自创建项目时自动生成的AssemblyInfo.cs文件。
在dll,tlb或两个文件中?
仅当使用[Guid]属性时,它才存在于DLL中,但通常如上所述,它是在运行时生成的。它始终存在于类型库中,这就是客户端编译器知道如何创建类的对象并使用其接口的方式。
会生成完全相同的GUID
是的,只有类型声明才起作用。
如果我通过现有的dll和tlb文件运行regasm
Regasm只能按照其/ tlb选项的要求创建类型库,而不能使用现有的。否则,它将执行与Tlbexp.exe完全相同的操作,使用Reflection枚举程序集中的类型以查找[ComVisible(true)]类型并生成匹配的类型库声明。它要做的额外事情是将类型库的注册表项写入HKLM / Software / Classes / Typelib。因此客户端IDE可以找到它。
使用dll和tlb参数设置运行regasm有什么意义?
没有“ dll参数”的真实含义可能意味着。如上所述,使用/ tlb生成类型库。是否部署类型库取决于其用法,如果不同时提供客户端代码,则应始终部署它,以便客户端程序员可以使用它。类型库的其他用法是this post的主题。如果您不确定客户端程序员将如何使用您的代码,请始终进行部署。
并非所有信息都已在注册表中?
注册表中的内容是有限的,只有足够的信息才能找到类型库文件。类型库中包含接口,方法签名,guid和工厂功能所需的CLSID的描述。
取消注册时,我们需要提供什么?
与注册完全相同,只需添加/取消注册。如果以前使用过/ tlb,还必须提供它,以便可以删除TypeLib注册表项。在您忙于开发和测试库时,自动化此功能非常重要,因为Guid通常是自动生成的,因此您可能在注册表中产生大量垃圾。当您忘记运行Regasm时,还会感到头疼。项目>属性>构建选项卡,“注册COM互操作”复选框。但不利的一面是,您必须运行VS高架,才能将其写入注册表。
regasm也会总是在SysWow64下生成条目吗?
SysWow64不起作用,请始终避免部署到c:\ windows。但是,是的,位数确实很重要,注册表的结构合理,因此64位应用程序不能在32位库中意外创建对象并在丑陋的异常中死亡。反之亦然。一个32位客户端应用程序将从HKLM / Software / WOW6432Node读取注册表项,只有使用32位版本的Regasm时,您才能获得注册表项。值得注意的是,考虑到C#代码可以在任何平台上运行,通常可以同时运行两种Regasm。
关于com - 有关COM .net程序集,重排,dll,tlb和guids的几个简短问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865240/
void main(){ char c; unsigned char uc; unsigned short us1, us2; short s1, s2; c
我要删除 wordpress html 格式在 woocommerce 产品简短描述中。添加 电话 到处标记。我知道如何在 wp 帖子和页面中做到这一点 remove_filter( 'the_exc
我通常会打开一个命令的联机帮助页,该命令已经知道我正在搜索的选项并阅读其描述。有时只需搜索该选项即可立即生效,有时该选项在其他地方被引用,有时该选项仅作为子字符串出现在前面的文本中。 作为一个具体的例
假设我们有一个编号的圆圈。我们想从 A 点到 B 点,但不知道应该向左还是向右。你会如何使用数字来计算你应该朝哪个方向前进? 示例: 我们目前在 1。我们想继续 5。我可以直观地看到 5 更近,所以我
我正在使用以下内容将产品名称和价格添加到悬停框。 在 functions.php 中 // Alter produt loop individual products add_action( 'woo
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个for循环 for ($x=1; $x<=5; $x++){ ($x == 3)? continue : true; //some code here } 现在执行时出现错误
我刚刚开始我的第一个 Java Swing 项目(之前主要做基于 Web 的应用程序),并尝试了解如何构建一个适当的架构,并在 MVC 组件之间分离关注点。 我发现的几乎所有文档都非常深入地介绍了每个
我是一名优秀的程序员,十分优秀!