1

皆さんが私を助けてくれることを願っています。私はかなり前にDelphiで書かれたdllを持っているので、XP32ビットと互換性があります。VS2010でC#で記述されたコードがあり、ターゲットは.NET4.0です。VS2010の参照にdllを追加しました。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\zippy32を使用して、64ビット用のFASTBeamCOM.dllを登録する方法を見つけることができました。ただし、このdllを機能させるために他に何をすべきかわかりません。

これは、XPとWindows7の両方で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ビットではうまく機能しますが、Windows764ビットでは機能しません。32ビットと64ビットの問題なのか、XPとWindows7の問題なのかわかりません。

4

0 に答える 0