J'essaie d'écrire des données sur un port série via P/Invoke (explicitement pas avec la classe SerialPort). Voici ce que j'ai jusqu'à présent:L'appel P/Invoke s'arrête
[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);
Je reçois un _portHandle = -1 et peut appeler WriteFile!. Mais après l'appel, ça ne fait rien. Je peux attendre indéfiniment en mode VS-debug et attendre que l'appel revienne. En outre, aucune exception n'est levée.
N'importe quel kernel32.dll-maîtres là-bas qui peut m'aider?
-t-il se bloquer lorsque vous appelez les fonctions de code natif C? – ThiefMaster
Y a-t-il une raison pour que vous utilisiez P/Invoke au lieu de la bibliothèque de framework géré pour faire cela? –
Oui, Silverlight 5-preparation: p –