【问题标题】:C# and com for vb6用于 vb6 的 C# 和 com
【发布时间】:2010-05-07 07:29:07
【问题描述】:

我对 C# 和 COM 有疑问。

[Guid("f7d936ba-d816-48d2-9bfc-c18be6873b4d")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Process : IProcess
{

    public Process()
    {
    }

    public int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount)
    {
        return 10;
    }
}

[ComVisible(true)]
[Guid("5c640a0f-0dce-47d4-87df-07cee3b9a1f9")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IProcess
{
    int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount);
}

还有VB代码

Private Sub Command1_Click()
    Dim test As Object
    Set test = New Forwardslash_PlayerTrackingSystem_Api.Process
End Sub

我得到以下信息,

ActiveX 组件无法创建对象?

关于如何解决此问题的任何想法?

【问题讨论】:

    标签: c# com vb6


    【解决方案1】:

    您是否勾选了项目属性中的“注册 COM 互操作”框?

    【讨论】:

      【解决方案2】:

      您是否也在 C# 源代码中定义了 ProgID Forwardslash_PlayerTrackingSystem_Api.Process?您的示例代码似乎不包含它。 (或者您是否正在使用现有的类型库并以某种方式通过 GUID 在 VB 中创建对象?)

      C# 组件是否在运行 VB 代码的机器上的注册表中正确注册?当您使用regasm.exe 工具自己构建和/或注册它时,请参阅Paolo 的答案,以了解让 VisualStudio 为您执行此操作的方法。对于“真实”COM 对象,此工具等效于 regsrv32.exe,但随后会在注册表中注册一个适当构建的 .NET 程序集以供 COM 使用。

      【讨论】:

      • 如果我在本地机器上进行 regasm,则会出现自动化错误。那就是说系统找不到指定的文件
      • @Jim "系统找不到指定的文件"
      【解决方案3】:

      您的 [InterfaceType] 属性错误。 VB6 需要 IDispatch 接口,它不能处理 IUnknown 接口。它最喜欢 ComInterfaceType.InterfaceIsDual,它生成完整的类型库,在 VB6 编辑器中启用 IntelliSense,并且比后期绑定的 IDispatch 快大约 1000 倍。

      【讨论】:

        【解决方案4】:

        如果程序集未在 GAC 中注册,则必须使用 regasm/codebase 开关。

        【讨论】:

          猜你喜欢
          • 2011-07-02
          • 2018-09-13
          • 1970-01-01
          • 2011-07-13
          • 1970-01-01
          • 2011-02-07
          • 1970-01-01
          • 2011-09-09
          • 2011-02-17
          相关资源
          最近更新 更多