{"id":2699,"date":"2020-05-04T09:32:49","date_gmt":"2020-05-04T06:32:49","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2699"},"modified":"2024-12-16T22:32:28","modified_gmt":"2024-12-16T19:32:28","slug":"add-javascript-support-for-cpp","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2020\/05\/04\/add-javascript-support-for-cpp\/","title":{"rendered":"Unterst\u00fctzung f\u00fcr JavaScript-Skripte in C++ hinzugef\u00fcgt"},"content":{"rendered":"<p>In diesem Beitrag beschreibe ich eine M\u00f6glichkeit, mithilfe der Tiny-JS-Bibliothek Unterst\u00fctzung f\u00fcr JavaScript-Skripte zu einer C++-Anwendung hinzuzuf\u00fcgen.<\/p>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D1%82%D0%B0%D1%80%D0%BE%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B0%D1%8F_%D0%B1%D0%B5%D1%80%D0%B5%D1%81%D1%82%D1%8F%D0%BD%D0%B0%D1%8F_%D0%B3%D1%80%D0%B0%D0%BC%D0%BE%D1%82%D0%B0_%E2%84%96_35\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2719\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2020\/05\/lezha.png\" alt=\"\" width=\"320\" height=\"75\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2020\/05\/lezha.png 320w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2020\/05\/lezha-300x70.png 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Tiny-JS ist eine Bibliothek zum Einbetten in C++, die die Ausf\u00fchrung von JavaScript-Code erm\u00f6glicht und Bindungen unterst\u00fctzt (die M\u00f6glichkeit, C++-Code aus Skripten aufzurufen)<\/p>\n<p>Zuerst wollte ich die beliebten Bibliotheken ChaiScript, Duktape oder Connect Lua verwenden, aber aufgrund von Abh\u00e4ngigkeiten und m\u00f6glichen Schwierigkeiten bei der Portabilit\u00e4t auf verschiedene Plattformen entschied ich mich, eine einfache, minimale, aber leistungsstarke MIT Tiny-Bibliothek zu finden; JS erf\u00fcllt diese Kriterien. Der einzige Nachteil dieser Bibliothek ist die fehlende Unterst\u00fctzung\/Entwicklung durch den Autor, ihr Code ist jedoch recht einfach, sodass Sie bei Bedarf die Unterst\u00fctzung \u00fcbernehmen k\u00f6nnen.<\/p>\n<p>Laden Sie Tiny-JS aus dem Repository herunter:<br \/><a href=\"https:\/\/github.com\/gfwilliams\/tiny-js\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/gfwilliams\/tiny-js<\/a><\/p>\n<p>F\u00fcgen Sie als N\u00e4chstes Tiny-JS-Header zum Code hinzu, der f\u00fcr die Skripte verantwortlich ist:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>#include \"tiny-js\/TinyJS.h\"\n#include \"tiny-js\/TinyJS_Functions.h\"\n\n<\/code><\/pre>\n<\/div>\n<p>F\u00fcgen Sie TinyJS-CPP-Dateien zur Build-Phase hinzu, dann k\u00f6nnen Sie mit dem Schreiben von Lade- und Ausf\u00fchrungsskripten beginnen.<\/p>\n<p>Ein Beispiel f\u00fcr die Verwendung der Bibliothek ist im Repository verf\u00fcgbar:<br \/><a href=\"https:\/\/github.com\/gfwilliams\/tiny-js\/blob\/master\/Script.cpp\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/gfwilliams\/tiny-js\/blob\/master\/Script.cpp<\/a><br \/>\n<a href=\"https:\/\/github.com\/gfwilliams\/tiny-js\/blob\/wiki\/CodeExamples.md\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/gfwilliams\/tiny-js\/blob\/wiki\/CodeExamples.md<\/a><\/p>\n<p>Ein Beispiel f\u00fcr die Implementierung der Handler-Klasse finden Sie im SpaceJaguar-Projekt:<br \/><a href=\"https:\/\/gitlab.com\/demensdeum\/space-jaguar-action-rpg\/-\/blob\/master\/project\/src\/Controllers\/SpaceJaguarScriptController\/SpaceJaguarScriptController.h\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/gitlab.com\/demensdeum\/space-jaguar-action-rpg\/-\/blob\/master\/project\/src\/Controllers\/SpaceJaguarScriptController\/SpaceJaguarScriptController.h<\/a><br \/>\n<a href=\"https:\/\/gitlab.com\/demensdeum\/space-jaguar-action-rpg\/-\/blob\/master\/project\/src\/Controllers\/SpaceJaguarScriptController\/SpaceJaguarScriptController.cpp\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/gitlab.com\/demensdeum\/space-jaguar-action-rpg\/-\/blob\/master\/project\/src\/Controllers\/SpaceJaguarScriptController\/SpaceJaguarScriptController.cpp<\/a><\/p>\n<p>Beispiel eines der Anwendung hinzugef\u00fcgten Spielskripts:<br \/><a href=\"https:\/\/gitlab.com\/demensdeum\/space-jaguar-action-rpg\/-\/blob\/master\/project\/resources\/com.demensdeum.spacejaguaractionrpg.scripts.sceneController.js\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/space-jaguar-action-rpg\/-\/blob\/master\/project\/resources\/com.demensdeum.spacejaguaractionrpg.scripts.sceneController.js<\/a><\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/github.com\/gfwilliams\/tiny-js\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/gfwilliams\/tiny-js<\/a ><br \/><a href=\"https:\/\/github.com\/dbohdan\/embedded-scripting-languages\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/dbohdan\/embedded-scripting-languages<\/a><br \/>\n<a href=\"https:\/\/github.com\/AlexKotik\/embeddable-scripting-languages\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/AlexKotik\/embeddable-scripting-languages<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag beschreibe ich eine M\u00f6glichkeit, mithilfe der Tiny-JS-Bibliothek Unterst\u00fctzung f\u00fcr JavaScript-Skripte zu einer C++-Anwendung hinzuzuf\u00fcgen. Tiny-JS ist eine Bibliothek zum Einbetten in C++, die die Ausf\u00fchrung von JavaScript-Code erm\u00f6glicht und Bindungen unterst\u00fctzt (die M\u00f6glichkeit, C++-Code aus Skripten aufzurufen) Zuerst wollte ich die beliebten Bibliotheken ChaiScript, Duktape oder Connect Lua verwenden, aber aufgrund von<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2020\/05\/04\/add-javascript-support-for-cpp\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Unterst\u00fctzung f\u00fcr JavaScript-Skripte in C++ hinzugef\u00fcgt&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[],"class_list":["post-2699","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=2699"}],"version-history":[{"count":26,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2699\/revisions"}],"predecessor-version":[{"id":3915,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2699\/revisions\/3915"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}