Ceci est mon C++ CodeC++/C# problème dans le tuyau nommé
HANDLE hPipe = ::CreateNamedPipe(_T("\\\\.\\pipe\\FirstPipe"),
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,
PIPE_UNLIMITED_INSTANCES,
4096,
4096,
0,
NULL);
ConnectNamedPipe(hPipe, NULL);
DWORD bytesWritten = 0;
WriteFile(hPipe, lpBuffers, sizeof(LPWSABUF), &bytesWritten, NULL);//LPWSABUF is structure and lpBuffers is a variable of this structure
Ceci est mon code C#
uint dataLen = (uint)(br.ReadInt32());
string len = (dataLen).ToString();
listBox1.Items.Add(len);
IntPtr dataAdd = IntPtr.Zero;
string data = "";
if (IntPtr.Size == 4) dataAdd = (IntPtr)br.ReadInt32(); //ERROR
else dataAdd = (IntPtr)br.ReadInt64();
byte[] b = new byte[(int)dataLen];
Marshal.Copy(b, 0, dataAdd, (int)dataLen);
data = Encoding.Unicode.GetString(b);
listBox2.Items.Add(data);
En sixième ligne de code C# donnant erreur. Cette fin du flux. Je n'ai aucune idée de pourquoi il donne une erreur.
Voici la structure
typedef struct _WSABUF {
ULONG len; /* the length of the buffer */
__field_bcount(len) CHAR FAR *buf; /* the pointer to the buffer */
} WSABUF, FAR * LPWSABUF;
Alors pourquoi est-ce qu'il donne une erreur? – Barun
Yup. L'écriture de la valeur du pointeur * buf * est également susceptible de provoquer des problèmes, l'utilisation de cette dernière provoquera une bombe lorsque le code C++ sera exécuté dans un autre processus. Écrivez la chaîne à la place. –
Il donne une erreur parce que vous avez écrit seulement les 4 premiers octets (ou 8 dans l'ordinateur 64 bits) au tuyau, au lieu de la structure entière. –