【问题标题】:How to mimick VB use of COM Object Interface using C#如何使用 C# 模拟 VB 对 COM 对象接口的使用
【发布时间】:2014-04-21 00:41:39
【问题描述】:

我正在使用供应商的 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# 做到这一点?您能给我的任何帮助和/或指示将不胜感激。

谢谢, 吉米

【问题讨论】:

    标签: c# vb.net interface com


    【解决方案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没有老化得很好。一个小的安装或配置问题可能会变成一个非常难以解决的头痛问题。当您遇到问题时,请务必联系该组件的供应商或作者。

    【讨论】:

    • Hans:您的解决方案是正确的,我之前曾尝试过类似的方法。我发现阻止我使用它的是我需要将 DLL 属性中的“嵌入互操作类型”设置为“假”。一旦我做出改变,一切都开始起作用了。感谢您的帮助。
    【解决方案2】:

    我建议使用 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多