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