- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为 .Net 4.0 创建了一个测试 COM 项目。然后我用 regasm 注册它:
RegAsm /codebase TestCom.dll /TLB
它在 JavaScript 中可以正常工作:
var app = new ActiveXObject("TestCom.TestClass");
app.Message1("123");
我想为 .Net 3.5 使用另一个 C# 项目中的 TestCom.TestClass,但是当我尝试添加对该项目的引用时,我收到有关更高框架版本的错误。 “添加引用”对话框(COM 部分)仅显示对 tlb 文件的引用,而不是 dll。
这是应该的方式吗?当我尝试添加对 tlb 文件的引用时,出现错误:
"Add a reference to the .NET assembly instead"
如何从 .Net 3.5 的另一个 C# 项目创建 TestCom.TestClass 实例?
最佳答案
IDE 可以从您选择的类型库中得知 COM 服务器是在 .NET 中实现的。而且它就是不让你加,这样做没有意义。当您改为添加对 .NET 程序集的引用时,它同样有效,实际上更好。
这并不是说你不能骗过机器,你可以使用 dynamic 关键字进行后期绑定(bind)。 IDE 无法干涉它。但是您没有以非托管客户端将要使用服务器的方式实际测试 COM 服务器。 CLR 将在运行时发现 COM 服务器实际上是一个 .NET 服务器并缩短管道。换句话说,它不会为服务器创建 RCW。服务器不会创建 CCW,现在它的工作方式与添加程序集引用时的工作方式完全相同。
所以这样做确实没有意义。只需添加程序集引用,即可享受 IntelliSense 支持和静态类型检查带来的诸多优势。并以测试任何 .NET 库的方式测试 COM 服务器代码。您不测试,并且根本无法测试的是 COM 互操作层。没关系,这并不是真正的问题。如果它是出于某种神秘的原因,那么你就无法对此做任何事情,CLR 内部的 COM 互操作无论如何都是一个黑盒子。
除了测试服务器代码之外,您需要做的就是执行集成测试。只需确保实际的非托管客户端实际上可以使用服务器即可。你做到了,你已经知道它在 Javascript 中运行良好。
关于c# - 如何使用来自另一个 .NET 程序集的 ComVisible .NET 库作为 COM 库。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951427/
使用 [ComVisible()] 和 [ComVisibleAttribute()] 有什么区别?他们做的事情完全一样,有什么区别? 谢谢。 最佳答案 .NET 中的通用约定是所有属性类都以后缀 A
我正在为 Microsoft 认证考试而学习,我遇到了一个情况,其中的类不是 ComVisible,但有方法。我假设因为类对 COM 不可见,所以它的成员将不可访问。但是,显然即使类不是,成员也可以是
我遇到此错误 CA1405“Game1”被标记为 ComVisible(true) 但在其对象层次结构中具有以下 ComVisible(false) 类型:'Game' 在最初是 game1 类的内容
我正在为 Enterprise Architect 编写插件管理器。 加载程序集(插件 dll)时,我需要知道程序集中定义的哪些类型是 COM 可见的,因此我可以添加所需的注册表项以将其注册为 COM
我总是用 [assembly: ComVisible(true)] 将我的 .NET 程序集标记为对 COM 可见。 ,认为我永远不知道何时有人可能需要从 COM 调用他们。我也开始使用 FxCop
我正在考虑将一些用 VB6 编写的遗留 COM 代码迁移到 .NET,但这需要生成一个与原始代码非常接近的类型库。 我在早期绑定(bind)到其他 VB6 组件时遇到了传递参数数组的问题。在原始的 V
我有一个 DLL,它的 ComVisible 属性可能设置为 true,也可能没有。我不确定它是如何构建的,或者具有什么属性?我所知道的是它是一个.Net DLL。简单地说,我怎么知道它是否是 Com
我正在将 C++ 转换为 C++/CLI,并希望将一些托管类公开为 COM 对象。在 C# 中,这很容易,设置 [ComVisible] 并从接口(interface)(也是 ComVisible)继
我们有一个 COM 可见的 .NET exe(.NET 3.5、VS 2010 SP1、VB.NET)项目。 VB6 应用程序使用 CreateObject 从此程序集中创建对象。 如果我们不签署程序
问题 在同一个单线程 COM 客户端中实例化两个独立的 .NET COM 可见类时,.NET 将它们加载到同一个 AppDomain 中。 我猜这是因为它们被加载到同一个线程/进程中。 此行为的示例显
在 C# 类库 (.Net 3.5) 中,我有一个非常简单的类(一些字符串和长属性,没有方法)继承自 System.Web.Services.Protocols.SoapHeader .我的类被标记为
我的情况是,第三方应用程序加载了一组 VB6 Active X DLL 扩展。这些扩展的唯一限制是它们包含一组预定义的 IDispatch 函数。 是否有可能实现一个 COM 可见 .NET DLL,
我创建了一个用给定域名(我工作的公司)签名的 ComVisible DLL。我将这个 DLL 放到客户的 Web 主机上,它在不同的域下运行,并使用以下命令注册它:C:\Windows\Microso
我有 .NET 程序集,其中一些类标记为 ComVisible 此程序集已注册到 regasm/codebase "assembly_path" 我有 app.config 名称(实际上是 - MyA
请帮我回答 Comvisible-enabled 属性是否会减慢 .NET App 的速度? 最佳答案 否 - ComVisibleAttribute 只是一个惰性属性,直到有人查找它,然后根据存储在
当我传递一个 PHP 索引数组时: $myVar = new COM('MyClass'); $myVar->DubbleArray([1, 2]); ...它作为 System.Object[] 传
我继承了我工作的一个大型遗留 ASP.NET 应用程序,我们公司希望我们使用 FxCop 并修复所有主要的规则违规问题。目前似乎普遍存在的规则如下: CA1405: COM visible type
无法从 w/cscript 访问继承属性 (P1)。 类结构看起来像这样: [ComVisible] public interface IA { string P1{get;} } [Com
MSDN 有 this article about [ComVisible] attribute .我不太明白设置 [ComVisible(true)] 时会发生什么。 MSDN 说 The defa
当您在 Visual Studio 中创建新的 C# 项目时,生成的 AssemblyInfo.cs 文件包含一个指定程序集 GUID 的属性。属性上方的注释指出“如果此项目向 COM 公开”则使用它
我是一名优秀的程序员,十分优秀!