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

时间:2014-03-15 16:50:59

标签: c# vb.net interface com

我正在使用供应商的API。它作为各种COM对象DLL提供。我试图访问IBBUtilityCode接口中包含的方法“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#完成此操作?您可以给予我任何帮助和/或指示。非常感谢。

谢谢, 吉米

2 个答案:

答案 0 :(得分:1)

  

他们似乎使用接口“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 老化不好。轻微的安装或配置问题可能会成为一个无法解决的问题。遇到问题时,请务必联系该组件的供应商或作者。

答案 1 :(得分:0)

我建议使用cominvoke。以下是Microsoft的链接,解释了它: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();