2010-12-04 4 views
4

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 마스터가 있습니까?

+0

는 또한 정지합니까? – ThiefMaster

+3

관리 프레임 워크 라이브러리 대신 P/Invoke를 사용하는 이유가 있습니까? –

+0

예, Silverlight 5 준비 : p –

답변

0

잘 작동하는 대신 내 자신을 개발하는 존 힌드 (http://msdn.microsoft.com/en-us/magazine/cc301786.aspx) :에서 시리얼 통신을 촬영!

+0

Silverlight 5를 사용하여 시리얼 장치와 통신하려고합니다.이 코드를 사용하여이 작업을 수행 할 수 있었습니까? –

+0

늦게 답변을 드려 죄송합니다. 예, 작동하도록했습니다. 불행히도, 전직 회사에서 해본 결과 더 이상 코드가 없습니다. Btw, 그것은 Silverlight 베타 버전과 함께있었습니다. 그 사이에 뭔가가 변경되었을 수 있습니다!? –

+0

문제 없으며 작동시키는 방법을 찾았습니다! 내가 여기서 어떻게했는지 확인할 수 있습니다. http://stackoverflow.com/questions/8989538/serial-communication-with-silverlight-5-com-port/9092519#9092519 –

2

유용한 프로젝트를 소개 한 Papa Mufflon에게 감사 드리며 직접 프로젝트에서 파생 시켰으며 https://github.com/ebraminio/PInvokeSerialPort에서 매우 간단한 opensource 프로젝트를 작성하여 https://nuget.org/packages/PInvokeSerialPort에서 다운로드 할 수도 있습니다. 이 프로젝트가 어떤 제안 그래서에 요청하는 기능을 수행하지 않는 가운데 코스

나를 위해 가치 : 네이티브 C 코드에서 함수를 호출 할 때

+1

2 개의 오픈 풀 요청이 있습니다. 이제 GitHub (그리고 그 중 하나는 나에 의해^_ ^). –