2010-11-18 6 views
23

Ich verwende WIA, um ein Bild von dem Scanner an das Windows-Formular zu erfassen. Hier ist der Code Ich verwende:Klasse kann nicht eingebettet werden. Verwenden Sie stattdessen die entsprechende Schnittstelle

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 auszuführen, erhalte ich diese Fehlermeldung:

Interop type 'WIA.CommonDialogClass' cannot be embedded. Use the applicable interface instead.

Und:

'WIA.CommonDialogClass' does not contain a definition for 'ShowAcquireImage' and no extension method 'ShowAcquireImage' accepting a first argument of type 'WIA.CommonDialogClass' could be found (are you missing a using directive or an assembly reference?

ich raten bin der zweite Fehler wird wegen des ersten Fehlers erhöht, oder?

Irgendwelche Vorschläge, wie Sie das beheben können?

+0

Ich habe festgestellt, dass CommonDialogClass in .NET 3.5 funktioniert und das Problem, das auftritt, wurde in späteren Versionen eingeführt. –

Antwort

26

Der 2. Fehler wird durch den ersten verursacht. Die Funktion "Interp-Typen einbetten" unterstützt nur das Einbetten von Schnittstellen, nicht von Klassen. Anders als nur auf diese Option auf dem WIA Bezug auf False festlegen und die Interop-Bibliothek bereitstellen, können Sie auch es wie dieses Problem zu beheben:

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

unintuitive, aber sie schaffen COM-Schnittstellen mit dem neuen Operator erlaubt. Sie müssen den Namespace-Namen voranstellen, da CommonDialog mit der Winforms CommonDialog-Klasse mehrdeutig ist.

+1

Unwirklich! Es funktioniert fast wie eine 'dynamische' Klasse, in der Sie keine Intellisense für irgendeine der Operationen erhalten, aber es funktioniert tatsächlich wie erwartet. Danke Freund! –

9

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

Dieser Fehler tritt auf, weil der Standardwert gilt für die von der Teststand-API-Interop-Assembly in dem neuen Projekt verweist Embed Interop Typen Eigenschaft ist. Um diesen Fehler zu beheben, ändern Sie den Wert der Embed Interop Typen Eigenschaft auf False die folgenden Schritte aus:

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 

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

4

Einfach, wählen Sie einfach die Fehler Assembly in Solution Panel/Referenzen. Drücken Sie dann Alt-Eingabe (Eigenschaften), suchen Sie "Interp-Typ einbetten" und setzen Sie seinen Wert auf "Falsch", wenn es True Brgs!

Verwandte Themen