Heute entdeckte ich zufällig Aptana, ein freies Plugin für Eclipse, mit dem man unter anderem auch AIR-Anwendungen erstellen könne. Da ich bereits eine komplette (und angepasste) Eclipse-Version laufen habe, wollte ich nicht das gesamte Studio-Bundle, sondern die Plugin-Version von Aptana installieren. Das hat soweit auch funktioniert, jedoch konnte ich das zusätzlich nötige Plugin zur Entwicklung von AIR-Anwendungen nicht installieren, da die MyAntana-Webseite, die den die Installation auslösenden Link enthält, leer blieb. Nach einigem rumprobieren habe ich dann entdeckt, dass man das Plugin auch direkt über das GUI installieren kann, in dem man die Antana-Plugins-View einblendet und dort in der Liste der verfügbaren Plugins via Kontextmenü die Installation startet.
Archive for January, 2009
AIR-Plugin für Aptana-Plugin installieren
Rückgabewert einer Delphi-Funktion an JavaScript
Bei Experimenten mit der Bridge für die Spidermonkey JavaScript Engine bin ich gerade auf die Frage gestoßen, wie man aus einer Delphi-Funktion, die dem Scriptscope vorgestellt wurde, einen Rückgabewert liefern kann. Die einfache Variante des publizieren einer Klasse mit AddNativeObject scheint für Functions nicht zu funktionieren, so dass eine Nullpointer-Exception beim Ausführen des Scripts entsteht.
Das mitgelieferte Beispiel für Kylix zeigt aber eine Möglichkeit, die allerdings eine händische Veröffentlichung der Objektstruktur erfordert:
Eine einfache Funktion mit Rückgabe eines Strings an den JavaScript-Aufruf:
uses jsintf, js15decl,...;
...
function jsAlert(cx: PJSContext; obj: PJSObject; argc: uintN;
argv, rval: pjsval): JSBool; cdecl;
...
function jsAlert(cx: PJSContext; obj: PJSObject; argc: uintN;
argv, rval: pjsval): JSBool; cdecl;
begin
//rval^ := JSVAL_VOID; //falls keine Rückgabe, void
rval^ := StringToJSVal(cx,Pchar('Das kommt zurück'));
ShowMessage(JSStringToString(JSValToJSString(argv^)));
Result := JS_TRUE;
end;
...
fEngine := TJSEngine.Create(40000);
fEngine.global.addMethod('alert',jsAlert,1);
In diesem Beispiel steht dem Script die globale Funktion alert(); zur Verfügung, die den übergebenen String zeigt und einen anderen String liefert. Folgender JS-Code ruft nun die Anzeige einer Messagebox auf und zeigt wiederum die Rückgabe in einer weiteren Messagebox an:
var erg;
erg = alert("Hallo Welt"); //Messagebox: Hallo Welt
alert(erg); //Messagebox: Das kommt zurück
