Klasse kann nicht eingebettet werden. Verwenden Sie die entsprechende Schnittstelle statt

StackOverflow https://stackoverflow.com/questions/4219605

  •  26-09-2019
  •  | 
  •  

Frage

Ich bin mit WIA ein Bild fron die Scanner an das Windows-Formular zu erfassen. Hier ist der Code verwende ich:

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");
}

Beim Versuch, diesen kleinen Test zu laufen, ich diesen Fehler:

  

Interop Typ 'WIA.CommonDialogClass'   kann nicht eingebettet werden. Verwenden Sie die geltenden   Schnittstelle statt.

Und dies:

  

'WIA.CommonDialogClass' nicht   enthalten, eine Definition für   ‚ShowAcquireImage‘ und keine Verlängerung   Verfahren ‚ShowAcquireImage‘ Akzeptieren einer   erstes Argument des Typs   ‚WIA.CommonDialogClass‘ gefunden werden konnte   (Möglicherweise fehlt eine using-Direktive oder   eine Montage Referenz?

Ich bin die zweite Fehler erraten wird, da der erste Fehler gestiegen, nicht wahr?

Alle Vorschläge, wie dieses Problem beheben?

War es hilfreich?

Lösung

Der zweite Fehler wird durch die ersten verursacht. Die Embed Interop-Typen verfügen nur unterstützt Einbettung Schnittstellen, keine Klassen. Andere als nur auf der WIA-Referenz, die Option auf Falsch und die Interop-Bibliothek bereitstellen, können Sie es auch, wie dieses Problem beheben könnten:

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

unintuitive aber die Schaffung COM-Schnittstellen mit dem neuen Operator erlaubt ist. Sie müssen den Namespace-Namen, weil Common Präfix ist nicht eindeutig mit der WinForms Common Klasse.

Andere Tipps

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

Dieser Fehler tritt auf, weil der Standardwert für das Einbetten Interop Typen Eigenschaft der Teststand-API-Interop-Assembly verwiesen werden im neuen Projekt wahr ist. Um diesen Fehler zu beheben, den Wert der Typen-Eigenschaft auf False einbetten Interop ändern, indem Sie die folgenden Schritte ausführen:

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

Links zum Thema: Knowledge 595FQJPI: Kann ich Visual Studio 2010 mit NI Teststand und Anruf .NET Framework 4.0-Code-Module?

Sie einfach, wählen Sie einfach die Fehler Baugruppe in Lösung Panel / Referenzen. Dann drücken Sie Alt-Eingabe (Eigenschaften) finden „Embed Interop Typ“ und setzen Sie den Wert auf „False“, wenn es wahr BRG!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top