2010-05-30 7 views
4

J'essaie d'envoyer des données au port LPT1 avec un programme C#, malheureusement sans succès .. J'utilise Windows 7 x64. J'ai essayé x86 et x64 (inpoutx64.dll) dll ..Port parallèle avec C#

Avec la dll x64 quand j'envoie:

Output(888, 255); 

Il continue juste le programme que tout allait bien, mais je ne peux pas voir quoi que ce soit sur mon multimètre (seule la 0.02V statique) ..

j'ai essayé également les éléments suivants avec C++:

int main() { 
int val = 0; 
printf("Enter a value\n"); 
scanf("%d", &val); 
_outp(0x378, val); 
getchar(); 
_outp(0x378, 0); 
return 0; } 

Mais il jette une exception:

Unhandled exception at 0x01281428 in ppac.exe: 0xC0000096: Privileged instruction. 

Je me souviens une fois que je fait quelque chose comme ce travail sur xp (C# pas le code C++), je l'espère, il est possible sur win7 trop .. S'il vous plaît me aider.

Merci.

Répondre

6

Un port IO au sens utilisé par _outp n'est pas le même que ce que vous essayez de faire avec un port parallèle. Un port IO est un moyen au niveau du processeur d'obtenir un accès brut à différents périphériques. L'utilisation de ports d'E/S avec _outp est censée être le genre de choses que les pilotes de périphériques font. Il est donc privilégié (c'est-à-dire uniquement le noyau) dans any version of windows that's modern enough d'avoir une bonne séparation noyau/espace utilisateur (à savoir tout ce qui est basé sur Windows NT). Je suis presque sûr à 100% que vous n'avez jamais eu _outp pour travailler sur XP.

Pour accéder au port parallèle dans le code de haut niveau, ouvrez-le comme un fichier normal, en utilisant le nom de fichier LPT1:.

+0

C'était possible sous XP mais seulement après l'installation d'un pilote de périphérique (qui a ouvert tous les ports IIRC). –

+0

Je voulais dire que la version C# fonctionnait .. ce n'était pas vraiment clair .. édité maintenant. L'accès en tant que fichier - ne fonctionne pas vraiment pour moi .. C# dit: FileStream n'ouvrira pas les périphériques Win32 tels que les partitions de disque et les lecteurs de bande. Évitez l'utilisation de "\\. \" Dans le chemin. –

+0

@Michael: 'inpoutx64.dll' a un pilote en mode noyau intégré à l'intérieur qui expose l'interface de port brut aux programmes en mode utilisateur. (Voir http://logix4u.net/Legacy_Ports/Parallel_Port/How_Inpout32.dll_works_.html). C'est pourquoi votre programme C# a travaillé sur XP. –