clr v0.0.19
node-clr : .NET Framework API Binding for Node.js
Usage:
# npm install clr
# node
> require('clr').init();
> System.Console.WriteLine('Hello, {0}!', 'world');
'Hello, world!'
> var now = new System.DateTime(2013, 7, 1);
> now.ToString();
'2013/07/01 0:00:00'
> require('clr').init({ assemblies: [ 'System.Windows.Forms' ] });
> with (System.Windows.Forms) {
> var f = new Form();
>
> var p = new FlowLayoutPanel();
> f.Controls.Add(p);
>
> var t = new TextBox();
> t.Text = 'world';
> p.Controls.Add(t);
>
> var b = new Button();
> b.Text = 'Greet';
> b.Click.add(function (thiz, ea) {
> console.log('clicked');
> MessageBox.Show('Hello, ' + t.Text + '!');
> });
> p.Controls.Add(b);
>
> Application.Run(f);
> }
(running WinForm application)
Prerequisites:
This library is built and tested on following environment:
- Node.js v6.3.1
- .NET Framework 4.5
- Visual Studio 2015
- Node.js native module build environment
clr.init(options)
Initialize CLR rutime with given options. Returns global namespace
.
options
{Object} -assemblies
{Array} - An array of assembly name (partial name, full name or absolute path to .dll/.exe). Defaults to['mscorlib', 'System', 'System.Core']
. -global
{boolean} - iftrue
, CLR global namespace objects are injected into javascript global object. Defaults totrue
.
CLR namespaces
- {Object}
CLR namespace objects contain nested namespaces or types.
CLR types
- {Function}
CLR type functions work as constructor for corresponding CLR types. The constructor returns wrapped CLR object.
var now = new System.DateTime(2013, 7, 1);
The code above invokes CLR constructor DateTime (Int32, Int32, Int32)
and returns {Object} that wraps DateTime
instance.
CLR type also contains static members.
var now = System.DateTime.Now;
The code above invokes CLR static property getter DateTime.Now
.
type.of(type)
Bind generic parameters to type and returns bound CLR type.
var list = new (System.Collections.Generic.List.of(System.Int32))();
CLR objects
- {Object}
Javascript object that wraps CLR instance, which contains instance members.
var now = System.DateTime.Now;
now.ToString();
> '2013/07/01 0:00:00'
CLR methods
- {Function}
CLR methods can be invoked as Javascript function. Arguments and return value are marshalled as conventions below.
System.Console.WriteLine('Hello, {0}!', 'world');
> 'Hello, world!'
CLR properties/fields
- {Getter/Setter}
CLR properties/fields are exposed as object's getter or setter function.
var now = System.DateTime.Now;
CLR indexed properties
obj.get(index)
Get object's default indexed property
var a =
obj.set(index, value)
CLR events
- {Object}
CLR events can be hooked by add
and remove
function.
event.add(handler)
Add javascript event handler to specified event.
handler
{Function}
event.remove(handler)
Remove javascript event handler from event.
This isn't working right now
handler
{Function}
Marshaling:
V8 => CLR:
null
orundefined
=>null
boolean
=>System.Boolean
nubmer
=> Any numeric type orSystem.Double
string
=>System.String
orSystem.Char
or EnumsFunction
=> Any delegate type orSystem.Func<System.Object[], System.Object>
Array
=> Any type of array orSystem.Object[]
Buffer
=>System.Byte[]
object
=>System.Dynamic.ExpandoObject
CLR => V8:
null
=>null
System.Boolean
=>boolean
- Any numberic type excepts System.Decimal =>
number
System.String
orSystem.Char
=>string
- Any other types => CLR wrapped object
Threading:
You can use .NET threads. All Javascript callback functions are invoked in main event loop.
var t = new System.Threading.Thread(function () {
console.log('Hello, world!');
});
t.Start();
> 'Hello, world!' // will be invoked asynchronously, but in main thread
TODO:
- Unit test
- Better marshaling
Object
=> class withDataContractAttribute
- handle cyclic reference
- New Event api, resembles to EventEmitter
- Prototype chain which reflects CLR inheritance
- Generic method
- cast
- valueOf (explicit conversion from wrapped CLR object to javascript types)
- Async invocation
- Compiler API
- Enum equality
3 years ago
7 years ago
7 years ago
7 years ago
8 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago