2010-11-18 3 views
23

WIA를 사용하여 스캐너에서 이미지를 Windows 형식으로 캡처하고 있습니다.클래스를 포함 할 수 없습니다. 해당 인터페이스를 대신 사용하십시오

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

그리고이 :

'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?

내가 추측하고있어

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

이 작은 테스트를 실행하려고, 난이 오류가 발생합니다 : 여기에 내가 사용하고 코드입니다 첫 번째 오류로 인해 두 번째 오류가 발생했습니다. 맞습니까?

이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

+0

나는 CommonDialogClass가 .NET 3.5에서 작동한다는 것을 발견했으며, 발생한 문제는 이후 버전에서 발견되었습니다. –

답변

26

두 번째 오류는 첫 번째 오류로 인해 발생합니다. Embed Interop Types 기능은 클래스가 아닌 포함 인터페이스 만 지원합니다. 다른 단지 False로 WIA 기준에 해당 옵션을 설정하고 상호 운용성 라이브러리를 배포하는 대신,이 같은 문제를 해결할 수있는 다음 새로운 연산자

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

직관적하지만 만드는 COM 인터페이스는 허용된다. CommonDialog은 Winforms CommonDialog 클래스와 모호하기 때문에 네임 스페이스 이름 앞에 접두사를 사용해야합니다. 기본값은 새 프로젝트에서 참조하는 TestStand의 API interop 어셈블리의 삽입 상호 운용성 유형 속성에 대한 사실 때문에

+1

언리얼! '동적 '클래스처럼 거의 작동합니다. 어떤 작업에서도 인텔리 센스를 얻지는 못하지만 실제로 예상대로 수행됩니다. 덕분에 친구! –

9

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

이 오류가 발생합니다.

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 

관련 링크 : 기술 지원 595FQJPI :이 오류를 해결하려면 다음 단계를 수행하여 False로 퍼가기 상호 운용성 유형 속성 값을 변경 내가 테스트 스탠드 및 통화 .NET 프레임 워크 4.0 코드와 비주얼 스튜디오 2010을 사용할 수 있습니다 모듈?

4

단순히 오류 조립을 솔루션 패널/참조로 선택하면됩니다. 그런 다음 Alt-Enter (속성)를 누르고 "Interop Interp Type 포함"을 찾아 True이면 "False"로 설정하십시오. Brgs!

관련 문제