Czołem Bracia
Od razu powiem,że na AS się nie znam praktycznie ani trochę.
Piszę dllkę zawierającą funkcję zmieniającą programowo rozdzielczość ekranu,która to funkcja jest wywoływana z wnętrza AS.Niestety,mam problem-pola w tworzonym przeze mnie Objectcie nie chcą się ustawić :/
extern "C"
{
__declspec(dllexport) FREObject setResolution(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
//generalnie wywołanie w AS jest postaci Object o=call("setResoution",1366,768);
int32_t widthC=0,heightC=0;
FREGetObjectAsInt32(argv[0],&widthC);//pobór parametrów działa OK
FREGetObjectAsInt32(argv[1],&heightC);
DEVMODE dev;//dev jest pobierane przy użyciu EnumDisplaySettings,ale kod zapisujący rozdziałki do listy działa,tak więc wyciąłem go żeby nie przesłaniał istoty problemu.
bool wasFound;
if(wasFound)
{
ChangeDisplaySettings(&dev,0);
FREObject w=0,h=0;
//to tworzenie FREObjectów daje FRE_OK,bo messageboxów nie ma
if(FRENewObjectFromInt32(widthC,&w)!=FRE_OK) MessageBox(NULL,L"Creation width AS Object from int32 failed!",NULL,MB_OK);
if(FRENewObjectFromInt32(heightC,&h)!=FRE_OK) MessageBox(NULL,L"Creation height AS Object from int 32 failed!",NULL,MB_OK);
uint8_t *name=(uint8_t*)"Object";
FREObject returnedValue=0;
if(FRENewObject(name,0,NULL,&returnedValue,NULL)!=FRE_OK)
{
MessageBox(NULL,L"Creation of returned AS Object failed!",NULL,MB_OK);//nie pokazuje się
return 0;
}
else
{
if(FRESetObjectProperty(returnedValue,(const uint8_t*)"width",&w,NULL)!=FRE_OK) MessageBox(NULL,L"Adding 'width' field to the returned AS Object failed!",NULL,MB_OK);
if(FRESetObjectProperty(returnedValue,(const uint8_t*)"height",&h,NULL)!=FRE_OK) MessageBox(NULL,L"Adding 'height' field to the returned AS Object failed!",NULL,MB_OK);
}
//ścieżka wykonania przechodzi tutaj,ale próba odczytu returnedValue.width/height już z poziomu flasha daje "undefined".Ktoś wie dlaczego??
return returnedValue;
}
MessageBox(NULL,L"setResolution()-resolution does not exists",NULL,MB_OK);
return 0;
}
}
A kurde,niby wszystko jest tak jak to w dokumentacji stoi:
http://help.adobe.com/en_US/air/extensions/WSb464b1207c184b14-456d8e321293d1599a6-8000.html
http://help.adobe.com/en_US/air/extensions/WSb464b1207c184b147d0a96711293ce0de36-8000.html
http://help.adobe.com/en_US/air/extensions/WSb464b1207c184b141d31980e12938cef3a0-8000.html
Jedyny pomysł jaki przychodzi mi na myśl to to,że owo FRESetObjectProperty nie umie stworzyć nowego pola,tylko ustawić na już istniejące-tylko że w takim razie z jakiej paki FRESetObjectProperty(returnedValue,(const uint8_t*)"height",&h,NULL) zwraca FRE_OK??.