皆さんが私を助けてくれることを願っています。私はかなり前に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の問題なのかわかりません。