[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 225
  • Last Modified:

Trying to write to Parallel Port causes exception

I have some code that writes to a parallel port.  I have used both the C++ _outp and the InPOut32 dll.  Whenever accessing parallel port to begin output, I get a 0xc0000005 exception which I believe is an access denied.  If anyone has seen this, and can give me some advice, that would be great.

Thanks,

Matt
0
neverrealm
Asked:
neverrealm
  • 5
  • 3
  • 2
  • +1
1 Solution
 
jkrCommented:
This is an Access Violation, meaning that your code uses invalid memory addresses. Could you post your code?
0
 
Jaime OlivaresSoftware ArchitectCommented:
I have used the WinIO library (www.internals.com) with success, take a look to previous question:

http:/Dot_Net/VisualC_PLUS_PLUS_DOT_NET/Q_21045309.html

Be carefull when generating the drivers, all must reside on the same folder of your app, and you must run the app from the Windows Explorer to make app's directory to be the active directory.

0
 
neverrealmAuthor Commented:
I think I may have figured out a way around this.  Do either of you guys know how to execute command line calls via VC++
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
jkrCommented:
You mean like

DWORD ExecuteAndWaitForCompletion   (   LPSTR   pszCmd)
{
   STARTUPINFO         si;
   PROCESS_INFORMATION pi;

   BOOL                bRes;

   DWORD               dwCode  =   0;

   MSG                           msg;

   ZeroMemory  (   &si,    sizeof  (   STARTUPINFO));

   si.cb           =   sizeof  (   STARTUPINFO);
   si.dwFlags      =   STARTF_USESHOWWINDOW;
   si.wShowWindow  =   SW_HIDE;

   bRes    =   CreateProcess   (   NULL,
                                   pszCmd,
                                   NULL,
                                   NULL,
                                   TRUE,
                                   NORMAL_PRIORITY_CLASS,
                                   NULL,
                                   NULL,
                                   &si,
                                   &pi
                               );

   while   (   WAIT_OBJECT_0   !=  MsgWaitForMultipleObjects   (   1,
                                                                   &pi.hProcess,
                                                                   FALSE,
                                                                   INFINITE,
                                                                   QS_ALLINPUT
                                                               )
           )
           {
               while   (   PeekMessage (   &msg,   NULL,   0,  0,  PM_REMOVE))
                       {
                           DispatchMessage     (   &msg);
                       }
           }

   GetExitCodeProcess  (   pi.hProcess,    &dwCode);

   CloseHandle (   pi.hProcess);
   CloseHandle (   pi.hThread);

   return  (   dwCode);
}

and call that like

ExecuteAndWaitForCompletion ( "ping.exe 192.168.0.1");

?

You could also use 'system()', but that pops up a console window.

WinExec( "ping.exe 192.168.0.1", SW_HIDE);

will work also if you don't have to wait for the command to finish.
0
 
neverrealmAuthor Commented:
Ok, the WinExec thing is exactly what I'm looking for, but it always comes up with a file_not_found error on copy C:\BarFile\label.bar LPT1.  I can type the same thing into the command line and it will print.
0
 
Jaime OlivaresSoftware ArchitectCommented:
you have to execute the "command prompt", something like:

WinExec( "cmd copy c:\\BarFile\\label.bar LPT1:");
0
 
neverrealmAuthor Commented:
Ok, that cured the file not found error in some instances, but it's still not performing the command, i.e., printing to LPT1
0
 
Jaime OlivaresSoftware ArchitectCommented:
Questions:
Are you writting "LPT1" or "LPT1:"
Is your printer actually connected to LPT1?
Is your printer enabled to work with DOS?
0
 
neverrealmAuthor Commented:
I tried both LPT1 and LPT1: and neither worked.  When I do a copy from the command prompt it works fine doing this:   copy c:\barfile\label.bar LPT1
0
 
neverrealmAuthor Commented:
I solved the problem.  I used a handle to the LPT1 port and wrote to the port the same way as with COM ports, without setting the state.
0
 
Computer101Commented:
PAQed, with points refunded (200)

Computer101
E-E Admin
0

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

  • 5
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now