Платформа.NET « Передать массив байт из VBA в C# через сокеты

В приложении на VBA посылаю данные через импортированную функцию send:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .vb.geshi_code {font-family:monospace;} .vb.geshi_code .imp {font-weight: bold; color: red;} .vb.geshi_code .kw1 {color: #000080;} .vb.geshi_code .co1 {color: #008000;} .vb.geshi_code span.xtra { display:block; }
Public Declare PtrSafe Function send Lib "ws2_32.dll" (ByVal socket As Long, buf() As Byte, ByVal buflen As Long, ByVal flags As Long) As Long
В приложении на C# принимаю данные:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .csharp.geshi_code {font-family:monospace;} .csharp.geshi_code .imp {font-weight: bold; color: red;} .csharp.geshi_code .kw1 {color: #0600FF;} .csharp.geshi_code .kw2 {color: #FF8000; font-weight: bold;} .csharp.geshi_code .kw3 {color: #008000;} .csharp.geshi_code .kw4 {color: #FF0000;} .csharp.geshi_code .kw5 {color: #000000;} .csharp.geshi_code .co1 {color: #008080; font-style: italic;} .csharp.geshi_code .co2 {color: #008080;} .csharp.geshi_code .co3 {color: #008080;} .csharp.geshi_code .coMULTI {color: #008080; font-style: italic;} .csharp.geshi_code .es0 {color: #008080; font-weight: bold;} .csharp.geshi_code .es_h {color: #008080; font-weight: bold;} .csharp.geshi_code .br0 {color: #000000;} .csharp.geshi_code .sy0 {color: #008000;} .csharp.geshi_code .st0 {color: #666666;} .csharp.geshi_code .st_h {color: #666666;} .csharp.geshi_code .nu0 {color: #FF0000;} .csharp.geshi_code .me1 {color: #0000FF;} .csharp.geshi_code .me2 {color: #0000FF;} .csharp.geshi_code span.xtra { display:block; }
bytes = new byte[1024];
int bytesRead = socket.Receive(bytes);

На выходе мусор.

Если, ради эксперимента, в объявлении функции send в VBA-приложении поменять тип второго параметра с
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .vb.geshi_code {font-family:monospace;} .vb.geshi_code .imp {font-weight: bold; color: red;} .vb.geshi_code .kw1 {color: #000080;} .vb.geshi_code .co1 {color: #008000;} .vb.geshi_code span.xtra { display:block; }
buf() As Byte
на
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .vb.geshi_code {font-family:monospace;} .vb.geshi_code .imp {font-weight: bold; color: red;} .vb.geshi_code .kw1 {color: #000080;} .vb.geshi_code .co1 {color: #008000;} .vb.geshi_code span.xtra { display:block; }
buf As Byte
и передать один байт, то все ОК.

Но как передавать массивы байт? Где-то читал, что сложные структуры данных передают так:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .vb.geshi_code {font-family:monospace;} .vb.geshi_code .imp {font-weight: bold; color: red;} .vb.geshi_code .kw1 {color: #000080;} .vb.geshi_code .co1 {color: #008000;} .vb.geshi_code span.xtra { display:block; }
ByVal buf As String
но и тут на выходе мусор.

По всей видимости, вопрос как-то связан с Blittable and Non-Blittable Types и Default Marshaling for Arrays, но понять о чем тут написано я не в силах.

Нужен ваш совет.

1 ответов