You can call your methods the same way you would call them from C, using ccall and .NET interop to expose managed functions with a C ABI.
(To be honest, if I was stuck with .NET and wanted a nicer language I would probably just use F#) On Oct 3, 2014 2:23 AM, "Stefan Babinec" <[email protected]> wrote: > Hi Isaiah. > > Yes, you are probably right. Maybe staticaly compiled Julia would help in > this case of debugging under msvc. > > Another question. > > How am I able to call from .NET my own methods written in Julia ? > How am I able to let know libjulia.dll that such methods exist ? > > Thanks. > > Stefan. > > On Thursday, October 2, 2014 2:53:50 PM UTC+2, Isaiah wrote: >> >> Hi Stefan, I'm not sure. I guess it might be failing the first time it >> tries to map an executable page. You might find some clues on the llvm >> mailing list. But the bigger issue is that the msvc debugger won't be very >> useful because msvc doesn't know anything about the jit'd object format >> (still ELF I think). If you want to use a debugger you should download the >> mingw64 tools in readme.windows and use gdb. >> On Oct 2, 2014 3:59 AM, "Stefan Babinec" <[email protected]> wrote: >> >>> Thanks Isaiah. >>> >>> It works. >>> >>> I also tried to pass Julia's system image to jl_init and with the little >>> help >>> >>> of SetDllDirectory method it works properly when i try to run it in >>> console. >>> >>> ******* >>> using System.Runtime.InteropServices; >>> >>> namespace ConsoleApplication1 >>> { >>> class Program >>> { >>> [DllImport("kernel32.dll", SetLastError = true)] >>> static extern bool SetDllDirectory(string lpPathName); >>> >>> [DllImport("libjulia.dll")] >>> static extern void jl_init(string message); >>> >>> [DllImport("libjulia.dll")] >>> static extern void jl_eval_string(string message); >>> >>> static void Main(string[] args) >>> { >>> SetDllDirectory(@"c:\Users\SB\AppData\Local\Julia-0.3.0\bin\ >>> "); >>> >>> jl_init(@"c:\Users\SB\AppData\Local\Julia-0.3.0\bin\"); >>> >>> jl_eval_string("print(sqrt(2.0))"); >>> } >>> } >>> } >>> ******* >>> >>> But when I try to run it directly in VS 2103 in (Debug/Release) I get >>> >>> following error from jl_init: >>> >>> "System.AccesViolationException. >>> Attempted to read or write protected memory. This is often an indication >>> that >>> >>> other memory is corrupt." >>> >>> Small piece from : >>> http://social.msdn.microsoft.com/Forums/en-US/8789ea67- >>> fbc5-4a7b-a4eb-d4a8a050d5c1/attempt-to-read-or-write- >>> protected-memory-this-is-often-an-indicating-that- >>> other-memory-is-corrupt >>> >>> "This issue shouldn't happen in managed code. The problem is typically >>> caused by some component (typically unmanaged, but can also be a bad >>> P/Invoke signature) that corrupts the program's memory." >>> >>> I tried also to suppress this exception by disabling >>> "Tools menu ->Options -> Debugging -> General -> Suppress JIT >>> optimization on module load" >>> but with no success ? >>> >>> Any ideas ? >>> >>> Best regards. >>> >>> Stefan. >>> >>> On Wednesday, October 1, 2014 12:16:15 AM UTC+2, Isaiah wrote: >>>> >>>> The ">" indicates the cmd prompt working directory: >>>> ``` >>>> C:\cmn\Julia-0.3.0>bin\ConsoleApplication2.exe >>>> 1.4142135623730951 >>>> ``` >>>> Otherwise, try passing the bin path as a char* to jl_init as suggested. >>>> >>>> >>>> On Tue, Sep 30, 2014 at 11:24 AM, Stefan Babinec <[email protected]> >>>> wrote: >>>> >>>>> I've copied exe file directly to julia's bin directory Isaiah. >>>>> >>>>> And I get the above mentioned error when I try to run it in the bin >>>>> directory. >>>>> >>>>> >>>>> On Tuesday, September 30, 2014 4:57:41 PM UTC+2, Isaiah wrote: >>>>>> >>>>>> Try running it from the Julia directory as `bin\CommandLine2.exe`. >>>>>> This is very much a minimal example; for general use, the bin directory >>>>>> should be passed as an argument to `jl_init`: >>>>>> >>>>>> https://github.com/JuliaLang/julia/blob/1ee440bee5035ccb33f8 >>>>>> 2b8a45febddd2f973baa/src/jlapi.c#L70-L73 >>>>>> >>>>>> To go much further than this will really require to dig in to both >>>>>> jlapi.c and the general Julia source code. Be aware that dealing with >>>>>> type >>>>>> translation and garbage collection are both non-trivial. See also >>>>>> `examples/embedding.c` in the julia tree, and several previous discussion >>>>>> on the mailing list. >>>>>> >>>>>> On Tue, Sep 30, 2014 at 9:08 AM, Stefan Babinec <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hi Isaiah. >>>>>>> >>>>>>> I tried and got this error: >>>>>>> "System image file " ?l\../lib/julia/sys.ji" not found" >>>>>>> >>>>>>> System Image sys.ji looks to be on his place and I have no problem >>>>>>> running Julia. >>>>>>> >>>>>>> Thanks. >>>>>>> >>>>>>> >>>>>>> On Tuesday, September 30, 2014 2:03:42 PM UTC+2, Isaiah wrote: >>>>>>>> >>>>>>>> I should mention that it is necessary to change the project target >>>>>>>> CPU from the default Any to x64 or x86 to match the libjulia >>>>>>>> architecture. >>>>>>>> On Sep 29, 2014 11:58 PM, "Isaiah Norton" <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> I tried this some time ago during 0.2, so to make sure it still >>>>>>>>> works I made a minimal translation of the embedding example to C#: >>>>>>>>> >>>>>>>>> ``` >>>>>>>>> using System; >>>>>>>>> using System.Runtime.InteropServices; >>>>>>>>> >>>>>>>>> namespace ConsoleApplication2 >>>>>>>>> { >>>>>>>>> class Program >>>>>>>>> { >>>>>>>>> [DllImport("libjulia.dll")] >>>>>>>>> static extern void jl_init(); >>>>>>>>> [DllImport("libjulia.dll")] >>>>>>>>> static extern void jl_eval_string(string message); >>>>>>>>> >>>>>>>>> static void Main(string[] args) >>>>>>>>> { >>>>>>>>> jl_init(); >>>>>>>>> jl_eval_string("print(sqrt(2.0))"); >>>>>>>>> } >>>>>>>>> } >>>>>>>>> } >>>>>>>>> ``` >>>>>>>>> >>>>>>>>> I compiled this, copied the binary into `Julia-0.3.0\bin`, and it >>>>>>>>> works: >>>>>>>>> >>>>>>>>> ``` >>>>>>>>> C:\cmn\Julia-0.3.0>bin\ConsoleApplication2.exe >>>>>>>>> 1.4142135623730951 >>>>>>>>> ``` >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Sep 29, 2014 at 4:11 PM, Tobias Knopp < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> yep, I have done this (mostly for fun) before and it works. One >>>>>>>>>> needs some experience with P/Invoke of course but this is no magic >>>>>>>>>> but >>>>>>>>>> similar to our ccall. >>>>>>>>>> >>>>>>>>>> Cheers, >>>>>>>>>> >>>>>>>>>> Tobi >>>>>>>>>> >>>>>>>>>> Am Montag, 29. September 2014 20:52:10 UTC+2 schrieb Stefan >>>>>>>>>> Karpinski: >>>>>>>>>>> >>>>>>>>>>> I assume that you can call C libraries from .NET, right? The C >>>>>>>>>>> library for Julia is libjulia – how to call it from C is explained >>>>>>>>>>> in the >>>>>>>>>>> embedding docs, calling it from .NET should be similar. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> > On Sep 29, 2014, at 12:37 PM, Guido De Bouver < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> > >>>>>>>>>>> > I have not found the C# examples, but I have not looked for >>>>>>>>>>> them. Sorry for that. >>>>>>>>>>> > >>>>>>>>>>> > So, any help on this, how could we call Julia from .NET ???? >>>>>>>>>>> > >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>> >>>>
