我正在使用供应商的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#完成此操作?您可以给予我任何帮助和/或指示。非常感谢。
谢谢, 吉米
答案 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();