P/Invoke를 통해 직렬 포트에 데이터를 쓰려고합니다 (직렬 포트 클래스가 아닌 경우).P/Invoke 호출이 중지됨
[DllImport("kernel32", SetLastError = true)]
static extern IntPtr CreateFile(string filename, // file name
uint desiredAccess, // read? write?
uint shareMode, // sharing
uint attributes, // SecurityAttributes pointer
uint creationDisposition,
uint flagsAndAttributes,
uint templateFile);
[DllImport("kernel32", SetLastError = true)]
static extern bool WriteFile(IntPtr hFile, // handle to file
byte[] lpBuffer, // data buffer
uint nBytesToWrite, // number of bytes to write
out uint nBytesWritten, // number of bytes written
[In] ref NativeOverlapped overlapped); // overlapped buffer
const uint OPEN_EXISTING = 3;
_portHandle = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
uint bytesWritten;
var buffer = Encoding.ASCII.GetBytes("foo\r");
var overlapped = new NativeOverlapped();
WriteFile(_portHandle, buffer, (uint)buffer.Length, out bytesWritten, ref overlapped);
나는 _portHandle을 얻을 = -1과의 WriteFile을 호출 할 수 있습니다 : 여기에 지금까지 무슨이다!. 하지만 전화를 건 후에는 아무 것도하지 않습니다. 나는 VS- 디버그 모드에서 영원히 기다려서 호출이 돌아 오기를 기다릴 수 있습니다. 또한 예외도 발생하지 않습니다.
나를 도와 줄 수있는 kernel32.dll 마스터가 있습니까?
는 또한 정지합니까? – ThiefMaster
관리 프레임 워크 라이브러리 대신 P/Invoke를 사용하는 이유가 있습니까? –
예, Silverlight 5 준비 : p –