在Windows 7 64位中运行但在XP 32位中不运行时出现InvalidCastException

时间:2012-07-18 13:47:21

标签: c# com casting windows-xp windows-7-x64

我希望你们都能帮助我。我有一个很久以前用Delphi编写的dll,所以它与XP 32位兼容。我在VS#2010中用C#编写的代码目标为.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 vs Windows 7问题。

0 个答案:

没有答案