SetCommTimeouts和GetCommTimeouts是kernel32中的函數,用於在與設備通信時設置和獲取超時。在並行端口上使用SetCommTimeouts失敗
現在GetCommTimeouts適用於我,但SetCommTimeouts將返回錯誤代碼87,它指示參數錯誤。
現在我的問題是這個SetCommTimeouts在與並行端口通信時是否工作?
如果是這樣,我可以做些什麼來解決它?
[DllImport("kernel32.dll")]
private static extern bool SetCommTimeouts(IntPtr hFile, ref LPCOMMTIMEOUTS lpCommTimeouts);
[DllImport("kernel32.dll ")]
private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);
[StructLayout(LayoutKind.Sequential)]
private struct LPCOMMTIMEOUTS
{
public UInt32 ReadIntervalTimeout;
public UInt32 ReadTotalTimeoutMultiplier;
public UInt32 ReadTotalTimeoutConstant;
public UInt32 WriteTotalTimeoutMultiplier;
public UInt32 WriteTotalTimeoutConstant;
}
private const uint GENERIC_WRITE = 0x40000000;
private const int OPEN_EXISTING = 3;
PHandler = CreateFile("LPT1", GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
IntPtr hnd = new System.IntPtr(PHandler);
LPCOMMTIMEOUTS lpcto = new LPCOMMTIMEOUTS();
Boolean bb = SetCommTimeouts(hnd, ref lpcto);
Console.WriteLine(bb); // get false here
是的,它的工作原理。如果你想要真正的答案,不要問是/否問題。 –
@HenkHolterman告訴我爲什麼我的SetCommTimeouts失敗,幫我 – castiel
你有一個參數錯誤,但你沒有發佈參數。無法回答。發佈代碼:函數大綱,導入定義等。 –