-
вот нада одной посылкой передать через сокет рекорд ... Client:=Socket.Create ... SendStr = record Typ : char; Bcode : array [1..BCodeLength] of char; Name : array [1..NameLength] of char; Kol : array [1..KolLenght] of char; end; ...
Var Buffer: SendStr;
Все там позаполнял и пытаюсь спихнуть: Client.Send(@Buffer, SendByte, SocketFlags.None);
Без @ матюкается на тип. С @ говорит, код опасный, ну да хрен с ним, убедил компилятор. Теперь компилится, но один фиг ничего не отсылает, а вылетает...
--------------------------- Debugger Exception Notification --------------------------- Project Project1.exe encountered unhandled exception class System.ArgumentException with message 'Object contains non-primitive or non-blittable data.'.
в дотнете делаю первые шаги, надеюсь и последние ... помогите пожалуйста ...
-
на шарпе я бы попробовал так
SendStr str; IntPtr ptr; Socket Client = new Socket(AddressFamily.InterNetwork, SocketType.Seqpacket, ProtocolType.IP); byte[] buf = new byte[System.Runtime.InteropServices.Marshal.SizeOf(str)];
System.Runtime.InteropServices.Marshal.StructureToPtr( str, ptr, false); System.Runtime.InteropServices.Marshal.Copy( ptr, buf, 0, buf.Length); Client.Send(buf, 0, buf.Length, SocketFlags.None);
-
clickmaker © (17.11.06 12:57) [1] спасибо огромное, попробую
-
Debugger Exception Notification Project Project1.exe encountered unhandled exception class System.ArgumentException with message 'The specified structure must be blittable or have layout information.'.
-
вот такое вот теперь выпадает
-
<StructLayout(LayoutKind.Sequential)> public struct...
помогает?
-
clickmaker © (17.11.06 14:20) [5] <StructLayout(LayoutKind.Sequential)> public struct... ухты а куда это вставить ?
-
> ухты а куда это вставить ?
чессно гря, не знаю, как это в паскалевском .Нете будет выглядеть. А Дельфи студии нету. В хелпе должно быть. ну то есть перед рекордом указать layout как-то. В дотнете так обычно апишные структуры портируют, чтобы ф-ии АПИ можно было дергать, unmanaged-код то бишь
-
clickmaker © (17.11.06 15:11) [7] понял ща буду пробовать
-
> Client.Send(@Buffer, SendByte, SocketFlags.None);
Хм. А вообще-то в дотнете принято сериализовать объект перед тем как передавать. Как ты интересно собираешся принимать его?
|