web-dev-qa-db-ja.com

クラスを埋め込むことはできません。代わりに適切なインターフェースを使用してください

WIAを使用して、スキャナーからウィンドウフォームにイメージをキャプチャしています。これが私が使っているコードです:

private void button2_Click(object sender, EventArgs e)
{
    const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
    CommonDialogClass wiaDiag = new CommonDialogClass();
    WIA.ImageFile wiaImage = null;

    wiaImage = wiaDiag.ShowAcquireImage(
            WiaDeviceType.UnspecifiedDeviceType,
            WiaImageIntent.GrayscaleIntent,
            WiaImageBias.MaximizeQuality,
            wiaFormatJPEG, true, true, false);

    WIA.Vector vector = wiaImage.FileData;

    Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData()));
    i.Save(@"D:\prueba1.jpeg");
}

この小さなテストを実行しようとすると、次のエラーが発生します。

相互運用タイプ「WIA.CommonDialogClass」を埋め込むことはできません。代わりに適切なインターフェースを使用してください。

この:

'WIA.CommonDialogClass'には 'ShowAcquireImage'の定義が含まれておらず、タイプ 'WIA.CommonDialogClass'の最初の引数を受け入れる拡張メソッド 'ShowAcquireImage'が見つかりません(usingディレクティブまたはアセンブリ参照がありませんか?

最初のエラーのために2番目のエラーが発生していると思いますよね?

これを修正する方法について何か提案はありますか?

23
delete

2番目のエラーは最初のエラーが原因です。相互運用機能の埋め込み機能は、クラスではなく埋め込みインターフェースのみをサポートします。 WIA参照でそのオプションをFalseに設定して相互運用ライブラリを展開するだけでなく、次のように修正することもできます。

 WIA.CommonDialog wiaDiag = new WIA.CommonDialog();

直感的ではありませんが、new演算子を使用してCOMインターフェイスを作成できます。 CommonDialogはWinforms CommonDialogクラスがあいまいなため、名前空間名にプレフィックスを付ける必要があります。

26
Hans Passant

http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

このエラーは、新しいプロジェクトで参照されるTestStand API Interop AssemblyのEmbed Interop Typesプロパティのデフォルト値がtrueであるために発生します。このエラーを解決するには、次の手順に従って、Embed Interop Typesプロパティの値をFalseに変更します。

Select the TestStand Interop Assembly reference in the references section of your project in the Solution Explorer.
Find the Embed Interop Types property in the Property Browser, and change the value to False

関連リンク:KnowledgeBase 595FQJPI:Visual Studio 2010をTestStandで使用して.NET Framework 4.0コードモジュールを呼び出すことはできますか?

9
Ramezani r

簡単に言うと、「Assembly into Solution Panel/References」というエラーを選択するだけです。次に、Alt-Enter(プロパティ)を押し、「Embed Interop Type」を見つけて、True Brgsの場合はその値を「False」に設定します。

4
Duy