【问题标题】:How to interact with another programs with OLE Automation in C#?如何在 C# 中使用 OLE 自动化与其他程序交互?
【发布时间】:2015-04-22 04:33:40
【问题描述】:

我用 C# 创建了一个应用程序,它可以从 SQL Server 读取项目数据并将其推送到名为“SLP-V Ishida Retail Scales”的称重系统。他们有一个接口“SLP-V 自动化接口”,允许用户程序与他们的系统交互。这是 SLP-V 帮助页面的注释:

自动化接口(也称为“COM(通用对象模型)接口”)为用户程序访问 SLP-V 功能提供了一种方法。最常见的应用是使用 VB 脚本来自动化 SLP-V 操作,例如导入主机文件。但是,自动化接口可以在任何支持自动化 (COM) 的编程环境中使用,这是将 SLP-V 功能整合到最终用户应用程序中的首选方法。

本主题为 SLP-V 自动化对象的方法和属性提供参考,并包含一些示例程序。

SLP-V 自动化对象

SLP-V 自动化对象名称为“Ishida.Slp.Scripting.CommonApi”,类型库文件为“SlpScripting.tlb”。

我的问题是,C# 语言是否允许我们使用 OLE 自动化与其他程序进行交互?如果答案是肯定的,我该如何与我的程序进行交互? 我的意思是喜欢调用他们的方法。因为我不能添加SlpScripting.tlb 作为参考。它说

无法添加对“SLP 脚本接口”的引用 ActiveX 类型库“SlpScripting.tlb”是从 .NET 程序集中导出的,不能作为参考添加。改为添加对 .NET 程序集的引用

我已经在 Google 上搜索过这个问题,但没有找到答案。


终于找到了解决办法 我不必在 c# 中添加引用,而不仅仅是使用:

System.Type objType = System.Type.GetTypeFromProgID("The name of progID that you want to call"); 
dynamic comObject = System.Activator.CreateInstance(objType);
  • 示例 ProgID = "Ishida.Slp.Scripting.CommonApi"。

然后只需调用该对象中存在的函数/方法,例如:

comObject.LoginToHost("localhost", 8085, username, pass);

【问题讨论】:

  • 他们在帮助页面中真的没有关于从 .NET 代码访问他们的系统的任何其他内容吗?因为该错误表明他们的东西也是用 .NET 编写的,并且系统不希望通过两组包装器来往返所有内容(翻译 .NET -> COM,然后翻译 COM -> .NET)
  • 我已经阅读了帮助文档,但没有提到如何从 C# .NET 代码访问他们的系统。如果我用 Visual Basic 制作这个程序,与 SLP 系统交互会更容易吗?因为里面提到“ScaleLink Pro 支持 ActiveX 自动化(也称为 OLE 自动化)。这允许 ScaleLink Pro 操作由外部程序控制,包括用脚本语言编写的程序,如 Visual Basic 和 Java 脚本。”

标签: c# ole


【解决方案1】:

OLE 自动化是我们现在称为 COM 的旧术语。是的,.NET 可以非常轻松地访问 COM(从 .NET 1.0 开始)。

您有以下选择:

方法一

首先在您的开发系统上“注册”COM 库。查看 SLP 系统的文档,这可能在设置过程中已经完成。如果没有,通常可以使用 regsvr32 XXX.DLL 手动注册 COM DLL。注意 32/64 位问题(如果您想在 64 位 Windows 中注册 32 位 COM DLL,请使用 C:\Windows\SysWOW64\regsvr32.exe)。

那么你的 COM DLL 应该在 Visual Studio 中列出,如果你去

添加引用 ==> COM

作为“SlpScripting Type Library 1.0”或类似版本。

然后,添加“使用 SLPxxxx”或类似名称(Intellisense 应显示真实姓名)。

在此之后,您应该能够创建 COM 对象的新实例。

如需更多帮助,请搜索“C# COM interop”,您会发现很多信息。

方法二

打开 Visual Studio 命令提示符,然后输入:

tlbimp SlpScripting.tlb 

将创建一个 DLL,您可以将其添加为参考。

【讨论】:

  • 首先,感谢您的解释。在您提到的方法 1 中,它已经在 COM 库中注册,名称为“SLP 脚本接口”。它与我之前提到的 SlpScripting.tlb 相同,当我添加它时,它向我显示一个错误,例如“无法添加对‘SLP 脚本接口’的引用......”在方法 2 中,我有以前做过。但是,仍然向我显示错误“TlbImp:错误 TI1029:类型库 'SlpScripting' 已从 CLR 程序集导出,无法作为 CLR 程序集重新导入。”这让我很困惑。但是感谢您的回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2014-02-18
  • 2018-07-20
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
相关资源
最近更新 更多