我希望你们都能帮助我。我有一个很久以前用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问题。