2010-05-30 58 views
4

我想發送數據到一個C#程序的LPT1端口,不幸沒有成功.. 我正在使用Windows 7 x64。 我都嘗試x86和x64(inpoutx64.dll)DLL的..並行端口與C#

隨着64位的DLL當我發送:

Output(888, 255); 

它只是延續了程序作爲一切正常,但我不能看在我的萬用表(僅靜態0.02V)什麼..

我也試圖與C++如下:

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

但它拋出一個異常:

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

我記得有一次我做了這樣的事情工作在XP(C#不是C++代碼),我希望它能夠在WIN7太.. 請幫助我。

謝謝。

回答

6

_outp所使用的IO端口與您嘗試使用並行端口時所使用的IO端口不同。 IO端口是處理器級別的方式,可以對不同設備進行原始訪問。使用_outp的IO端口應該是設備驅動程序所做的事情。因此,any version of windows that's modern enough擁有良好的內核/用戶空間分離(即基於Windows NT的任何內容)是有特權的(即僅內核)。我幾乎100%肯定你從來沒有得到_outp在XP上工作。

要訪問高級代碼中的並行端口,只需使用文件名LPT1:將其像普通文件一樣打開即可。

+0

它可能在XP下,但只有在安裝設備驅動程序(打開所有端口IIRC)後。 – 2010-05-30 22:18:44

+0

我的意思是C#版本正在工作..它不是很清楚..現在編輯。 訪問它作爲一個文件 - 並不真的爲我工作.. C#說: FileStream不會打開Win32設備,如磁盤分區和磁帶驅動器。避免在路徑中使用「\\。\」。 – 2010-05-31 15:16:28

+0

@Michael:'inpoutx64.dll'裏面嵌入了一個內核模式驅動,它將原始端口接口暴露給用戶模式程序。 (請參閱http://logix4u.net/Legacy_Ports/Parallel_Port/How_Inpout32.dll_works_.html)。這就是爲什麼你的C#程序在XP上工作。 – 2010-05-31 21:15:49