Это может быть связано с выравниванием и заполнением байт, чтобы структура выходила на четное количество байтов (или слов) на вашей платформе. Например, в C на Linux следующие 3 структуры:
#include "stdio.h"
struct oneInt {
int x;
};
struct twoInts {
int x;
int y;
};
struct someBits {
int x:2;
int y:6;
};
int main (int argc, char** argv) {
printf("oneInt=%zu\n",sizeof(struct oneInt));
printf("twoInts=%zu\n",sizeof(struct twoInts));
printf("someBits=%zu\n",sizeof(struct someBits));
return 0;
}
У членов, размер которых (в байтах) равен 4 байтам (32 бита), 8 байтам (2x 32 бита) и 1 байт (2 +6 бит) соответственно. Вышеупомянутая программа (в Linux с использованием gcc) печатает размеры 4, 8 и 4, где последняя структура дополняется так, что это одно слово (4 x 8 бит байтов на моей 32-битной платформе).
oneInt=4
twoInts=8
someBits=4
Если Вы просто хотите сохранить и получить данные, Вы, вероятно, хотите использовать класс SharedObject. Дополнительную информацию см. в ссылке SharedObject Adobe этого.
Если Вы захотите получить доступ к cookie HTTP, то необходимо будет использовать ExternalInterface, чтобы говорить с JavaScript. Путем мы делаем это здесь должно иметь класс помощника под названием HTTPCookies.
HTTPCookies.as:
import flash.external.ExternalInterface;
public class HTTPCookies
{
public static function getCookie(key:String):*
{
return ExternalInterface.call("getCookie", key);
}
public static function setCookie(key:String, val:*):void
{
ExternalInterface.call("setCookie", key, val);
}
}
Необходимо удостовериться, что Вы включаете JavaScript с помощью 'allowScriptAccess' параметра в объекте флэш-памяти.
Затем необходимо создать пару функций JavaScript, getCookie и setCookie, следующим образом (с благодарностью на quirksmode.org)
HTTPCookies.js:
function getCookie(key)
{
var cookieValue = null;
if (key)
{
var cookieSearch = key + "=";
if (document.cookie)
{
var cookieArray = document.cookie.split(";");
for (var i = 0; i < cookieArray.length; i++)
{
var cookieString = cookieArray[i];
// skip past leading spaces
while (cookieString.charAt(0) == ' ')
{
cookieString = cookieString.substr(1);
}
// extract the actual value
if (cookieString.indexOf(cookieSearch) == 0)
{
cookieValue = cookieString.substr(cookieSearch.length);
}
}
}
}
return cookieValue;
}
function setCookie(key, val)
{
if (key)
{
var date = new Date();
if (val != null)
{
// expires in one year
date.setTime(date.getTime() + (365*24*60*60*1000));
document.cookie = key + "=" + val + "; expires=" + date.toGMTString();
}
else
{
// expires yesterday
date.setTime(date.getTime() - (24*60*60*1000));
document.cookie = key + "=; expires=" + date.toGMTString();
}
}
}
После того как у Вас есть HTTPCookies.as в Вашем проекте флэш-памяти и HTTPCookies.js, загруженный из Вашей веб-страницы, необходимо смочь назвать getCookie и setCookie из фильма флэш-памяти, чтобы получить или установить cookie HTTP.
Это будет только работать на очень простые значения - строки или числа - но на что-либо более сложное действительно необходимо использовать SharedObject.
Я полагаю, что объекты флэш-памяти имеют функции, доступные через JavaScript, поэтому если нет никакого более легкого пути, Вы могли бы, по крайней мере, использовать JavaScript onload обработчик и передать document.cookie в Ваше приложение флэш-памяти с внешней стороны.
Более подробная информация: http://www.permadi.com/tutorial/flashjscommand/
Можно считать и записать cookie (Локальный общий объект) из флэш-памяти. Флэш-куки хранятся на Вашем ПК в рамках каталога с названием Вашего домена. Те каталоги расположены в:
[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\
Эта статья от Adobe является хорошим началом.
cookie доступны JavaScript через document.cookie - пытаются использовать getURL флэш-памяти для вызывания функции JavaScript.
getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');
Некоторый поиск с помощью Google показывает, что может быть сделан при помощи строк запроса:
Для веб-приложений можно передать значения swf параметрами URL, и (со сценарием действия внутри swf) сохраняют их к песочнице.
метод getCookie в HTTPCookies.as должен использовать оператор "возврата".
import flash.external.ExternalInterface;
public class HTTPCookies
{
public static function getCookie(key:String):*
{
return ExternalInterface.call("getCookie", key);
}
public static function setCookie(key:String, val:*):void
{
ExternalInterface.call("setCookie", key, val);
}
}