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 ????
>>>>>>>>>>> >
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>
>>>>

Reply via email to