1

我希望你们都可以帮助我。我有一个很久以前用 Delphi 编写的 dll,因此它与 XP 32 位兼容。我有用 C# 用 VS2010 编写的代码,目标是 .NET 4.0。我将 dll 添加到 VS2010 中的引用中。它在 XP 中可以正常工作,但是当我在 Windows 7 64 位中尝试相同的代码时,出现以下错误

无法将“FASTBeamCOM.GPFASTBeamClass”类型的 COM 对象转换为接口类型“FASTBeamCOM.IGPFASTBeam”。此操作失败,因为 IID 为“{B7D3D8C1-6919-11D4-8616-9E780E5EC276}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

FASTBeamCOM dll 包含 GPFASTBeamClass 和 IGPFASTBeam 接口。我能够找到如何在管理员模式下使用 sysWOW64\regsvr32 为 64 位注册 FASTBeamCOM.dll。但是,我不知道还能做什么才能让这个 dll 正常工作。

这是我用来在 XP 和 Windows 7 中测试 dll 的一些代码示例

  private static FASTBeamCOM.GPFASTBeamClass f = new FASTBeamCOM.GPFASTBeamClass();
   public FASTBeamCOM.IGPFASTBeam FB
   {
       get { return f as FASTBeamCOM.IGPFASTBeam; }
   }
   public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        int iCopyProtection = 0;
        FB.VerifyCopyProtection(ref iCopyProtection);
        FB.setApplicationName("Wholehouse.dll");
        FB.initializeFB();
        FB.SetProductAvailability();
    }

我尝试将 FB 属性声明为 GPFASTBeamClass 和 IGPFASTBeam,但我收到了相同的错误消息。错误发生在 FB.VerifyCopyProtection 命令中。就像我说的,它在 XP 32 位中运行良好,但在 Windows 7 64 位中运行良好。我不知道这是 32 位与 64 位的问题还是 XP 与 Windows 7 的问题。

4

0 回答 0