Klasse kann nicht eingebettet werden. Verwenden Sie die entsprechende Schnittstelle statt
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?
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!