[PD-announce] clr: externals in CLR assemblies

Davide Morelli info at davidemorelli.it
Tue Jan 17 17:07:02 CET 2006


hello!

[clr] is an external that lets you create externals using clr languages (C#, 
vb.net, ruby.net, dotLisp, etc..), it embeds mono.

you can find it in
/externals/clr

At the moment it can only receive and send bangs, floats, symbols and lists. 
ASAP I'll add support for pointers, signals and Gem. Also many important 
functions are not present (things like timer callbacks etc..)

I've tested it on winXp and osx 10.3 but i'm pretty sure it will work on 
linux too.
I need help writing makefiles, defining dependancies and testing.
I will soon build binary packages.
It is possible to build binary packages including mono and all the GAC so 
the "end-user" won't need to install mono to use [clr] and the externals 
needing it

requirements:
  * mono installed
  * glib, gthread, iconv in path (they should be inside mono as well)

what you need to do to compile it:
  * edit PATHs in the makefile so the compiler can find mono, glib, gthread, 
etc...

to write an external you need to:
  * in the pd folder compile pd.cs and Atom.cs into PureData.dll
  * use the PureData namespace
  * add PureData.dll to the references
  * declare an "private intPtr x" variable
  * declare a "void SetUp()" function and put there inlet, outlet and 
selectors creation
(see the external folder for a couple of examples)

-----------

features:
  * you can write externals in any clr language (C#, managed C++, J#, 
Jscript.Net, PerlNET, Ruby, Scheme, VB.NET, dotLisp and a lot more.. )
  * use bangs, symbols, lists (both in and out)
  * declare inlets, outlets, selectors
  * use initialization arguments
  * multi-instance
  * compile many externals into one single .dll file
  * extend an external including its assembly instead of modifying its 
source code
  * you can compile the external using whichever clr compiler you like most
  * assemblies are "cross-platform" (a single .dll file for all platforms)

what is missing:
  * support for signals, Gem, graphical externals
  * many callback functions like timers etc..
  * there may be threading issues
  * testing, testing, testing!

--------------

detailed implementation notes, (future) binary pakages here:
http://www.davidemorelli.it/dokuwiki/doku.php?id=csharp:csharp

PS. many thanks to Thomas Grill for his help!

Ciao,
Davide Morelli
www.davidemorelli.it





More information about the Pd-announce mailing list