библиотека Prototype включает объект Хеш-таблицы, с ".toQueryString ()" метод, который позволяет, Вы для легкого превращения объекта/структуры JavaScript в строку запроса разрабатываете строку. Так как сообщение требует, чтобы "тело" запроса было отформатированной строкой строки запроса, это позволяет Вашему запросу Ajax работать правильно сообщением. Вот пример с помощью Прототипа:
$req = new Ajax.Request("http://foo.com/bar.php",{
method: 'post',
parameters: $H({
name: 'Diodeus',
question: 'JavaScript posts a request like a form request',
...
}).toQueryString();
};
Среда CLR содержит верификатор, который гарантирует, что работающий код (проверяемый IL) не может повредить память в управляемой среде. Это не позволяет вам объявить такую структуру, в которой поля перекрываются. По сути, ваша структура содержит два члена данных. Одно целое число (4 байта) и собственное целое число (размер указателя). В 32-битной среде CLR, в которой вы, вероятно, запускаете свой код, char []
займет 4 байта, поэтому, если вы поместите целое число меньше четырех байтов от начала структуры, вы имеют перекрывающиеся поля. Это'
I figured I'd respond with the solution I used to create the union -- which was my original intention. I used an unsafe struct and a fixed array and then used a property to interact with the fixed array. I believe this should do what I want.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace StructTest
{
[StructLayout(LayoutKind.Explicit)]
unsafe struct OuterType
{
private const int BUFFER_SIZE = 100;
[FieldOffset(0)]
private int transactionType;
[FieldOffset(0)]
private fixed byte writeBuffer[BUFFER_SIZE];
public int TransactionType
{
get { return transactionType; }
set { transactionType = value; }
}
public char[] WriteBuffer
{
set
{
char[] newBuffer = value;
fixed (byte* b = writeBuffer)
{
byte* bptr = b;
for (int i = 0; i < newBuffer.Length; i++)
{
*bptr++ = (byte) newBuffer[i];
}
}
}
get
{
char[] newBuffer = new char[BUFFER_SIZE];
fixed (byte* b = writeBuffer)
{
byte* bptr = b;
for (int i = 0; i < newBuffer.Length; i++)
{
newBuffer[i] = (char) *bptr++;
}
}
return newBuffer;
}
}
}
class Program
{
static void Main(string[] args)
{
OuterType t = new OuterType();
System.Console.WriteLine(t);
}
}
}