2013-05-31 4 views
0

연구 및 프로그래밍이 끝나고 나면 inpout32.dll 및 inpoutx64.dll의 모든 변형 (바이너리, 소스 코드, 32 비트, 64 비트 주소 래퍼)을 시도하게되었습니다. 없음 작동 : 포트의 출력 비트가 변경되지 않습니다.inpout32.dll/inpoutx64.dll이 모든 병렬 포트와의 I/O를 처리합니까?

그러나 병렬 포트 출력을하는 다른 상업적으로 사용 가능한 프로그램을 사용하기 때문에 0과 1 사이의 값을 전달하여 8 개의 출력 비트 (D0-D7)에 트리거 (상태 변경)를 감지 할 수 있기 때문에 가능하다는 것을 알고 있습니다. 255, 내 응용 프로그램에서하고 싶은 것.

나는 적어도이 페이지에서 모든 조언을 따랐다 :

Windows 7, 64 비트를 사용하고 있습니다. 내 SIIG Cyberpro 포트는 주소 0xCCD8에 4 개의 상태 비트가있는 LPT3으로 매핑됩니다. Q : 다른 ECP 프린터 포트가 0x0378에 LPT1로 매핑되었지만 작동하지 않습니다.

Win7에서 직접 _inp(), _outp() 호출보다 더 잘 알고 있습니다.

아무도 도와 줄 수 있습니까?

드라이버 코드를 다운로드하고 수정해야 할 경우 할 수 있으면 할 수 있지만 어렵지는 않다고 생각합니다. 참고로

using System; 
using System.Runtime.InteropServices; 

namespace ParallelPort 
{ 
    public class PortAccess 
    { 
     //inpout.dll 

     [DllImport("inpout32.dll")] 
     private static extern void Out32(ushort PortAddress, short Data); 

     [DllImport("inpout32.dll")] 
     private static extern short Inp32(ushort PortAddress); 

     private ushort _PortAddress = 0; 

     public ushort PortAddress { get { return _PortAddress; } } 

     public PortAccess(ushort portAddress) 
     { 
      _PortAddress = portAddress; 

      short result = 0; 
      try 
      { 
       result = Inp32(portAddress); 
      } 
      catch (DllNotFoundException e) 
      { 
       throw new ArgumentException("Unable to find InpOut32.dll"); 
      } 
      catch (BadImageFormatException) 
      { 
       result = 0; 
      } 

      if (0 == result) 
       throw new ArgumentException("Unable to open parallel port driver"); 
     } 

     //Public Methods 
     public void Write(ushort Data) 
     { 
      Out32(_PortAddress, (short)Data); 
     } 

     public byte Read() 
     { 
      return (byte)Inp32(_PortAddress); 
     } 
    } 
} 
+0

당신이 * 알 수있는 * 작동하지 않는다는 것을 설명하지 않는 것이 표준 실수입니다. "오픈 컬렉터 출력"이라는 용어는 전자 제품으로 향하는 것을 의미하지 않습니다 .stackexchange.com 및 병렬 포트가 작동하는지 확인하는 방법을 묻습니다. –

+0

죄송합니다. 피곤했습니다. 나는 잊었다. 대답은 : 나는 각 병렬 포트 출력 비트를 움직이는 시간 그래프의 컬러 라인으로 표시하는 데이터 판독기/수집기가있는 두 번째 컴퓨터가 있습니다. 포트에 쓰는 상용 소프트웨어를 사용하여 1 바이트 값을 쓸 수 있습니다. 그래프에서 각 비트를 개별적으로 설정하고 식별 할 수 있습니다. 독점 상용 소프트웨어를 반영한 ​​소프트웨어를 사용하면 상업용 소프트웨어와 "동일한"작업을 수행하더라도 출력이 표시되지 않는 것으로 나타났습니다. 단일 바이트를 작성하십시오. 나는 comm-sw이 그것을 어떻게하는지 알아낼 수있는 방법이 없다. – shipr

답변

0

:

코드의 내 최종 버전에서 inpout32.dll하는 인터페이스, 32 비트 컴파일을 사용

내가
[DllImport("inpout32.dll")] 
private static extern void DlPortWritePortUshort(ushort PortAddress, ushort Data); 

을 추가하고 함수를 호출하는 대신

Out32 (ushort addr, ushort 값) 코드가 작동했습니다.

정확한 인터페이스가 중요한 이유는 모르지만 실제로는 그렇습니다. 제안 된 [어딘가 미정]과 같이 16 비트 포트 주소의 부호 확장 때문에 그럴 수 있습니다.