{"id":18859394,"url":"https://github.com/tuarua/fresharp","last_synced_at":"2025-04-14T12:14:16.669Z","repository":{"id":79377873,"uuid":"88296294","full_name":"tuarua/FreSharp","owner":"tuarua","description":"C# wrapper for FlashRuntimeExtensions","archived":false,"fork":false,"pushed_at":"2020-10-18T01:20:40.000Z","size":4408,"stargazers_count":50,"open_issues_count":2,"forks_count":7,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-14T12:14:08.276Z","etag":null,"topics":["actionscript","adobe-air","air-native-extensions","ane","csharp","dotnet-framework"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tuarua.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"tuarua","custom":["paypal.me/tuarua"]}},"created_at":"2017-04-14T19:24:13.000Z","updated_at":"2025-02-24T12:29:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"a314890d-f6df-42a8-a2f6-f4cfdec51e06","html_url":"https://github.com/tuarua/FreSharp","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreSharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreSharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreSharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuarua%2FFreSharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tuarua","download_url":"https://codeload.github.com/tuarua/FreSharp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248877960,"owners_count":21176244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actionscript","adobe-air","air-native-extensions","ane","csharp","dotnet-framework"],"created_at":"2024-11-08T04:17:39.058Z","updated_at":"2025-04-14T12:14:16.647Z","avatar_url":"https://github.com/tuarua.png","language":"C#","funding_links":["https://github.com/sponsors/tuarua","paypal.me/tuarua"],"categories":[],"sub_categories":[],"readme":"# FreSharp\n\n[ ![Download](https://img.shields.io/nuget/v/TuaRua.FreSharp.svg) ](https://www.nuget.org/packages/TuaRua.FreSharp/)\n\n### Features\n - Build Adobe Air Native Extensions using C#\n\nThe package is hosted on NuGet at https://www.nuget.org/packages/TuaRua.FreSharp/\n\n----------\n\n### Getting Started\n\nA basic Hello World [starter project](/starter_project) is included \n\n\n### How to use\n###### Converting from FREObject args into C# types, returning FREObjects\nThe following table shows the primitive as3 types which can easily be converted to/from C# types\n\n\n| AS3 type | C# type | AS3 param-\u003eC# | return C#-\u003eAS3 |\n|:--------:|:--------:|:--------------|:-----------|\n| String | string | `var str = argv[0].AsString()` | `return str.ToFREObject()`|\n| int | int | `var i = argv[0].AsInt()` | `return i.ToFREObject()`|\n| Boolean | bool | `var b = argv[0].AsBool()` | `return b.ToFREObject()`|\n| Number | double | `var dbl = argv[0].AsDouble()` | `return dbl.ToFREObject()`|\n| uint ARGB | Color | `var clr = argv[0].AsColor()` | `return clr.ToFREObject()`|\n| Date | DateTime | `var dt = argv[0].AsDateTime()` | `return dt.ToFREObject()`|\n| Rectangle | Rect | `var rect = argv[0].AsRect()` | `return rect.ToFREObject()` |\n| Point | Point | `var pnt = argv[0].AsPoint()` | `return pnt.ToFREObject()` |\n| BitmapData | Bitmap | `var bmp = argv[0].AsBitmap()` | `return bmp.ToFREObject()` |\n| Array | string[] | `var arr = argv[0].AsStringArray()` | `return arr.ToFREObject()`|\n| Array | int[] | `var arr = argv[0].AsIntArray()` | `return arr.ToFREObject()`|\n| Array | double[] | `var arr = argv[0].AsDoubleArray()` | `return arr.ToFREObject()`|\n| Array | bool[] | `var arr = argv[0].AsBoolArray()` | `return arr.ToFREObject()`|\n| Object | Dictionary | `var dct = argv[0].AsDictionary()` | N/A |\n| null | FREObject.Zero |  | return FREObject.Zero |\n\n#### Basic Types\n```C#\nstring myString = argv[0].AsString();\nint myInt = argv[1].AsInt();\nbool myBool = argv[2].AsBool();\n\nconst string sharpString = \"I am a string from C#\";\nreturn sharpString.ToFREObject();\n```\n\n#### Creating new FREObjects\n```C#\nvar frePerson = new FREObject().Init(\"com.tuarua.Person\");\n\n// create a FREObject passing args\n// \n// The following param types are allowed: \n// int, uint, short, long, bool, string, double, Rect, Point, DateTime, Color, FREObject\nvar frePerson = new FREObject().Init(\"com.tuarua.Person\", \"Bob\", \"Doe\", 28, myFREObject);\n```\n\n#### Calling Methods\n```C#\n// call a FREObject method passing args\n// \n// The following param types are allowed: \n// int, uint, short, long, bool, string, double, Rect, Point, DateTime, Color, FREObject\nvar addition = freCalculator.Call(\"add\", 100, 33);\n```\n\n#### Getting / Setting Properties\n```C#\nvar oldAge = person.GetProp(\"age\").AsInt();\nvar newAge = oldAge + 10;\n\n// The following param types are allowed: \n// int, uint, short, long, bool, string, double, Rect, Point, DateTime, Color, FREObject\nperson.SetProp(\"age\", newAge);\n\n// create a FreSharpObject DynamicObject \ndynamic person = new FreObjectSharp(\"com.tuarua.Person\", \"Ben McBobster\", 80);\nint oldAge = person.age; // implicit conversion\nvar name = (string) person.name; // explicit conversion\n\n// The following prop types are allowed: \n// int, uint, short, long, bool, string, double, Rect, Point, DateTime, Color, FREObject\nperson.age = oldAge + 10;\n```\n\n#### Arrays\n```C#\nvar inFre0 = new FREArray(argv[0]);\n// convert to a C# [string]\nvar airStringVector = inFre0.AsStringArray();\n\n// create a Vector.\u003ccom.tuarua.Person\u003e with fixed length of 5\nvar newFreArray = new FREArray(\"com.tuarua.Person\", 5, true);\nvar len = newFreArray.Length;\n\n// loop over FREArray\nforeach (var fre in freIntArray) {\n    Trace(fre.AsInt());\n}\n\n// set element 1 to 123\nfreIntArray[1] = 123.ToFREObject();\n\n// push 2 elements to FREArray\nfreIntArray.Push(22, 33);\n\n// return C# [int] to AIR\nvar marks = new[] {99, 98, 92, 97, 95};\nreturn marks.ToFREObject();\n```\n\n#### Sending Events back to AIR\n\n```C#\nTrace(\"Hi\", \"There\");\n\n// with interpolation\nTrace($\"My name is: {name}\");\n\nDispatchEvent(name: \"MY_EVENT\", value: \"this is a test\"); \n```\n\n#### Bitmapdata\n```C#\n// read AS3 bitmapData into a Bitmap\nvar bitmap = new FreBitmapDataSharp(argv[0]).AsBitmap();\n\nreturn bitmap.ToFREObject();\n```\n\n#### ByteArrays\n```C#\nvar ba = new FreByteArraySharp(inFre);\nba.Acquire();\nvar byteData = ba.Bytes;\nvar base64Encoded = Convert.ToBase64String(byteData);\nba.Release();\n```\n\n#### Error Handling\n```C#\n// Turn on logging to trace out any captured errors in FreSharp\nFreSharpLogger.GetInstance().Context = Context;\n\nperson.Call(\"add\", 100); // not passing enough args - traces captured error.\n\ntry {\n    myCSharpFunc(); // call a C# method which can throw\n}\ncatch (Exception e) {\n    return new FreException(e).RawValue; // return as3 error and throw in swc\n}\n```\n\nAdvanced: Extending FreObjectSharp. Creating a C# version of flash.geom.point\n\n```C#\nusing FREObject = System.IntPtr;\nusing Point = System.Windows.Point;\n\npublic static class FrePoint {\n    public static FREObject ToFREObject(this Point value) {\n        return new FREObject().Init(\"flash.geom.Point\", value.X, value.Y);\n    }\n\n    public static Point AsPoint(this FREObject inFre) {\n        dynamic fre = new FreObjectSharp(inFre);\n        return new Point(fre.x, fre.y);\n    }\n}\n```\n----------\n\n### Required AS3 classes\n**com.tuarua.fre.ANEUtils.as** and **com.tuarua.fre.ANEError.as** are required by FreSharp and should be included in the AS3 library of your ANE\n\n### Required Dependencies\nStarting from version 2.2.0 FreSharp.ane is required in your AIR project.      \nThis ANE contains the required FreSharp dlls and also handles the searching for and loading of a project's C# dll when packaged inside the ANE.    \nNo more copying these files into your AIRSDK!\n\n### Tech\n\nUses .NET 4.6\n\n### Prerequisites\n\nYou will need\n \n - Visual Studio 2017\n - AIR 19+ SDK\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuarua%2Ffresharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftuarua%2Ffresharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuarua%2Ffresharp/lists"}