2011-01-05 17 views
6

मुझे कोई त्रुटि या अपवाद नहीं मिला है।सी # एलपीटी inpout32.dll

एक विंडो में बटन:

private void button1_Click(object sender, EventArgs e) 
{ 
    ControlPort.Output(0x378, 0xff); 
} 

और inpout.dll इंटरफ़ेस:

class ControlPort 
{ 
    [DllImport("inpout32.dll", EntryPoint = "Out32")] 
    public static extern void Output(int adress, int value); 
} 

क्या गलत है? डी 2 पर एलईडी हर समय होता है।

मेरे पास विंडोज 7 x64 अल्टीमेट है।

उत्तर

5

x64 के लिए आपको "InpOutx64.dll" का उपयोग करना चाहिए।

पर जाएं: http://www.highrez.co.uk/Downloads/InpOut32/default.htm वहां आप और अधिक पढ़ सकते हैं और नमूने पा सकते हैं।

+0

+1, उसको याद किया। –

3

आपको नीली स्क्रीन पर यह गलत होने पर अपवाद नहीं मिल रहा है।

  • आप गलत पता (0x3bc, 0x2f8)
  • आप गलत
  • आप गलत संग्रहालय में तोड़ दिया हार्डवेयर

प्रश्न प्राप्त करने के लिए एलईडी वायर्ड उपयोग कर रहे हैं: में से एक उठाओ इससे परे आपकी मदद करने के लिए बहुत खराब दस्तावेज है।

+0

इनमें से कोई नहीं। पहला उत्तर सही है। मैं गलत संस्करण डीएलएल का उपयोग कर रहा था। – Hooch

+0

हम्म, 64-बिट प्रक्रिया में 32-बिट DLL का उपयोग करके हमेशा अपवाद उत्पन्न करता है। –

5

अगर किसी को इसकी आवश्यकता है तो कार्य कोड।

using System; 
using System.Runtime.InteropServices; 

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

     [DllImport("inpout32.dll")] 
     private static extern UInt32 IsInpOutDriverOpen(); 

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

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

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

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

     [DllImport("inpout32.dll")] 
     private static extern void DlPortWritePortUlong(int PortAddress, uint Data); 

     [DllImport("inpout32.dll")] 
     private static extern uint DlPortReadPortUlong(int PortAddress); 

     [DllImport("inpoutx64.dll")] 
     private static extern bool GetPhysLong(ref int PortAddress, ref uint Data); 

     [DllImport("inpoutx64.dll")] 
     private static extern bool SetPhysLong(ref int PortAddress, ref uint Data); 

     //inpoutx64.dll 

     [DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen")] 
     private static extern UInt32 IsInpOutDriverOpen_x64(); 

     [DllImport("inpoutx64.dll", EntryPoint = "Out32")] 
     private static extern void Out32_x64(short PortAddress, short Data); 

     [DllImport("inpoutx64.dll", EntryPoint = "Inp32")] 
     private static extern char Inp32_x64(short PortAddress); 

     [DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUshort")] 
     private static extern void DlPortWritePortUshort_x64(short PortAddress, ushort Data); 

     [DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUshort")] 
     private static extern ushort DlPortReadPortUshort_x64(short PortAddress); 

     [DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUlong")] 
     private static extern void DlPortWritePortUlong_x64(int PortAddress, uint Data); 

     [DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUlong")] 
     private static extern uint DlPortReadPortUlong_x64(int PortAddress); 

     [DllImport("inpoutx64.dll", EntryPoint = "GetPhysLong")] 
     private static extern bool GetPhysLong_x64(ref int PortAddress, ref uint Data); 

     [DllImport("inpoutx64.dll", EntryPoint = "SetPhysLong")] 
     private static extern bool SetPhysLong_x64(ref int PortAddress, ref uint Data); 

     private bool _X64; 
     private short _PortAddress; 

     public PortAccess(short PortAddress) 
     { 
      _X64 = false; 
      _PortAddress = PortAddress; 

      try 
      { 
       uint nResult = 0; 
       try 
       { 
        nResult = IsInpOutDriverOpen(); 
       } 
       catch (BadImageFormatException) 
       { 
        nResult = IsInpOutDriverOpen_x64(); 
        if (nResult != 0) 
         _X64 = true; 

       } 

       if (nResult == 0) 
       { 
        throw new ArgumentException("Unable to open InpOut32 driver"); 
       } 
      } 
      catch (DllNotFoundException) 
      { 
       throw new ArgumentException("Unable to find InpOut32.dll"); 
      } 
     } 

     //Public Methods 
     public void Write(short Data) 
     { 
      if (_X64) 
      { 
       Out32_x64(_PortAddress, Data); 
      } 
      else 
      { 
       Out32(_PortAddress, Data); 
      } 
     } 

     public byte Read() 
     { 
      if (_X64) 
      { 
       return (byte)Inp32_x64(_PortAddress); 
      } 
      else 
      { 
       return (byte)Inp32(_PortAddress); 
      } 
     } 
    } 
} 
+0

मुझे 'System.EntryPointNotFoundException मिलता है: 'IsInpOutDriverOpen_x64()' को कॉल करने का प्रयास करते समय DLL' inpoutx64.dll 'में' IsInpOutDriverOpen 'नामक एक प्रविष्टि बिंदु खोजने में असमर्थ। –

+0

अब उनके पास यह 'BOOL _stdcall IsXP64Bit() है; \t \t \t // ओएस 64 बिट (x64) विंडोज़ है, तो यह सत्य लौटाता है। जो दोनों डीएलएल फाइलों का हिस्सा है। – SSpoke

1

मैं अपने पुराने लैपटॉप, जहां डेटा बंदरगाह (PIN2-pin9) सेट नहीं किया जा सकता है पर Windows 2000 पर एलपीटी पोर्ट के साथ एक समस्या हल हो गई।

इस आयातित समारोह का उपयोग करना:

Out32(0x378 + 2, 0x00); 

तो बंदरगाह ठीक से काम करता है कि:

[DllImport("inpout32.dll", EntryPoint = "Out32")] 
public static extern void Out32(int address, int value); 

हर रिबूट या Windows के पुनः आरंभ करने के बाद मैं इस लाइन को कॉल करने के लिए है। मुझे लगता है कि समस्या द्वि-दिशात्मक सेटिंग्स में है (0x37A पर 6 वें बिट पर नियंत्रण पोर्ट)।