2010-11-22 5 views
0

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; 

Répondre

1

LPWSABUF est pointeur, sa taille est de 32 ou 64 bits. Vous voulez peut-être dire ceci:

 
WriteFile(hPipe, lpBuffers, sizeof(WSABUF), &bytesWritten, NULL); 
+0

Alors pourquoi est-ce qu'il donne une erreur? – Barun

+0

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. –

+0

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. –

0

simplement vous avez atteint la fin du flux de sorte que l'exception de fin de flux est levée. S'il s'agit de la première commande de lecture d'un fichier, alors votre fichier est vide

Questions connexes