问题标签 [coclass]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 类未在 Delphi XE7 中注册
我在我的 Delphi 应用程序中使用 com .dll。为此,我使用 regsvr32.exe .dll name 命令注册了我的 com .dll。它注册得很好,然后我将此 com .dll 转换为类型库(.tlb pas 文件)。
所以现在我正在使用这个 .tlb pas 文件来通信 com 对象。.tlb 文件为我提供了与 dll 通信的包装类。
这一切都在我的机器上运行良好,因为 dll 在我的机器中注册。但是当我把我的应用程序放在另一台机器上时,它会抛出类似“类未注册”的错误。
我如何在另一台机器上注册 .dll 或 perticuler 类。我们不能像我在我的机器上为所有机器那样手动注册 .dll。
请让我知道如何务实地注册 .dll 或 coclass。
c# - 无法将类型为“System.__ComObject”的 COM 对象转换为类类型 AgentInfo
我有两个 C# 项目,一个是 dll,另一个是 windows 窗体应用程序。
我在 dll 中定义了一个 CoClass,如下所示
它实现了接口_IAgentInfo,定义如下
两者都定义在一个dll中,使用成功注册
在另一个 C# windows 客户端应用程序中,我尝试通过强制转换从运行对象表或从另一个接口获得的对象来访问 AgentInfo,如下所示`
其中上面的代码是从ROT中获取对象的,或者,我有另一个从ROT中获取的接口,定义如下
我从 ROT 获得对接口 _IAgentDLLServer 的引用,然后在其上调用方法 GetAgentInfo()
我可以将其转换为_IAgentInfo,但是当我尝试将返回的对象转换为AgentInfo时,如下
我收到以下错误
我尝试了以下解决方案
一个。STAThread 在 main 方法上,因为一篇文章建议运行此对象的线程没有访问类型信息的权限,按照 为什么我不能将我的 COM 对象转换为它在 C# 中实现的接口?
湾。更改应用程序配置文件如下
并且版本与注册表的 InProcServer32 中的版本匹配
按照
.NET Framework 4.5 是默认的,.NET Framework 3.5 是可选 的 ,System.InvalidCastException 的奇怪情况(“无法将类型为'System.__ComObject' 的 COM 对象转换为类类型 System.Windows.Forms.UserControl”)显示工具窗口
C。我尝试了 ComImport 方法
在我想使用这个对象的类中,按照 在 C# 中调用 COM 的精益方法
d。双重铸造对象
AgentInfo info=(AgentInfo)(object)rotNativeMethods.GetObject("BizBrainAgentService.AgentInfo");
e 使用 as 运算符
F。在 agentInfoClass 上实现 IProvideClassInfo 和 IProvideClassInfo2 接口 [使用 ComImport 属性导入它们]
在所有这些尝试之后,我想知道是否可以从 COM 接口或运行对象表返回一个 COM CoClass,而不是一个 COM 接口。
另外,另一个问题是,根据消息,AgentInfo 是否被视为 C# /dot 网络类型而不是 COM 类型。真的是这样吗?在这种情况下,演员阵容将失败。
我知道返回 CoClass 而不是接口可能不是一个好习惯,但我需要能够监听来自 AgentInfo 对象的事件,而这似乎从接口中是不可能的。