如何用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#中做到这一点?如果您能给我任何帮助和/或指点,我将不胜感激。
谢谢,吉米
他们似乎是通过首先声明一个指针来使用接口"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();