P / Invoke Call просто останавливается - PullRequest
4 голосов
/ 04 декабря 2010

Я пытаюсь записать данные в последовательный порт через P / Invoke (явно не с SerialPort-классом).Вот что у меня есть:

[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-debug и ждать ответа на вызов.Кроме того, не исключение.

Кто-нибудь из kernel32.dll-мастеров может мне помочь?

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

Спасибо Папе Муффлону за представление этого полезного проекта, я сам извлек его и сделал из него очень простой проект с открытым исходным кодом https://github.com/ebraminio/PInvokeSerialPort, который также можно загрузить с https://nuget.org/packages/PInvokeSerialPort.

Конечно, этот проект не завершен, так что любые предложения, какие-либо функции, запрашивающие его, ценны для меня:)

0 голосов
/ 04 декабря 2010

Получено последовательное сообщение от Джона Хинда (http://msdn.microsoft.com/en-us/magazine/cc301786.aspx) вместо разработки моего собственного:)

Отлично работает!

...