如何用c#模仿VB使用COM对象接口

本文关键字:COM 对象 接口 使用 VB 何用 模仿 | 更新日期: 2023-09-27 17:50:35

我正在使用供应商的API。它以各种COM对象DLL的形式提供。我试图访问接口ibbuutilitycode中包含的方法"CreateDisconnectedADORecordset"。

来自供应商的代码示例如下:

Dim oReservices As New REServices
Dim oUtilCode As IBBUtilityCode
Dim rs As Recordset
Dim sSQL As String
sSQL = "SELECT * FROM CONSTITUENT_BANK"
oReservices.Init SessionContext
Set oUtilCode = oReservices
Set rs = oUtilCode.CreateDisconnectedADORecordset(sSQL)

他们似乎是通过首先声明一个指针来使用接口"IBBUtilityCode",然后将"oReservices"转换为指向接口的指针?

我不是一个VB程序员,所以我真的不知道。

如何在c#中做到这一点?如果您能给我任何帮助和/或指点,我将不胜感激。

谢谢,吉米

如何用c#模仿VB使用COM对象接口

他们似乎是通过首先声明一个指针来使用接口"IBBUtilityCode",然后将"oReservices"转换为指向接口的指针?

实现接口的类的概念并不是COM或Visual Basic所特有的,在c#中你也应该熟悉它。就像在这个VB6代码中一样,您不需要强制转换来获取接口引用。翻译完全是机械的:

var oReservices = new REServices();
oReservices.Init(SessionContext);
IBBUtilityCode oUtilCode = oReservices
var sSQL = "SELECT * FROM CONSTITUENT_BANK"
var rs = oUtilCode.CreateDisconnectedADORecordset(sSQL)

不缺乏这种组件的陷阱,ADO已经老化得很好。一个小的安装或配置问题可能会变成一个难以解决的难题。当您遇到问题时,请务必与此组件的供应商或作者联系。

我建议使用cominvoke。以下是来自微软的链接:http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx

下面是该页中的一个示例:

// Create an instance of a COM coclass:
FilgraphManager graphManager = new FilgraphManager();
// See if it supports the IMediaControl COM interface. 
// Note that this will throw a System.InvalidCastException if 
// the cast fails. This is equivalent to QueryInterface for 
// COM objects:
IMediaControl mc = (IMediaControl) graphManager;
// Now you call a method on a COM interface: 
mc.Run();