Isaiah,
Thank you so much for this. This  really help and hopefully I can move on
making some progress...

Einar


On Tue, Sep 9, 2014 at 4:06 PM, Isaiah Norton <[email protected]>
wrote:

> julia> cval(x) = ccall(:jl_eval_string, Ptr{Void}, (Ptr{Cchar},), x)
> cval (generic function with 1 method)
>
> julia> cval("using DSP")
> Ptr{Void} @0x00000000034bc280
>
> julia> cval("DSP.hanning")
> Ptr{Void} @0x00000000306408a0
>
> julia> hanning = unsafe_pointer_to_objref(ptr)
> hanning (generic function with 1 method)
>
> On Tue, Sep 9, 2014 at 9:47 AM, Einar Otnes <[email protected]> wrote:
>
>> It seems that your suggestion using ccall from within julia to play
>> around with the c-api provides some info. Running your ccall command on a
>> couple of "External Packages", i.e. DSP and HDF5  returns the Null pointer.
>>
>> pkg_ptr = ccall(:jl_eval_string,Ptr{Void},(Ptr{Cchar},),"DSP.Pkg.hanning")
>> Ptr{Void} @0x0000000000000000
>>
>>
>> pkg_ptr = ccall(:jl_eval_string,Ptr{Void},(Ptr{Cchar},),"Base.Pkg.sin")
>> Ptr{Void} @0x0000000002a431f0
>>
>> pkg_ptr = ccall(:jl_eval_string,Ptr{Void},(Ptr{Cchar},),"Base.Pkg.cos")
>> Ptr{Void} @0x00000000032acfa0
>>
>> pkg_ptr = ccall(:jl_eval_string,Ptr{Void},(Ptr{Cchar},),"HDF5.Pkg.h5open")
>> Ptr{Void} @0x0000000000000000
>>
>>
>> So, it seems we are not able to get hold of the external packages from
>> within C. Any ideas?
>>
>> Best,
>>
>> Einar
>>
>>
>> On Fri, Sep 5, 2014 at 5:46 PM, Jake Bolewski <[email protected]>
>> wrote:
>>
>>> It's jl_eval_string located in jl_api.c in src.
>>>
>>> so you would do
>>> jl_value_t * func2 = jl_eval_string("DSP.hanning")
>>>
>>> The best way to play around with Julia's c-api is within julia itself.
>>> julia> pkg_ptr = ccall(:jl_eval_string, Ptr{Void}, (Ptr{Cchar},),
>>> "Base.Pkg.clone")
>>> Ptr{Void} @0x00007fd11c1754a0
>>>
>>> julia> unsafe_pointer_to_objref(ans)
>>> clone (generic function with 2 methods)
>>>
>>> julia> typeof(ans)
>>> Function
>>>
>>> That way you can prototype what you want much more easily.
>>>
>>> On Friday, September 5, 2014 9:32:43 AM UTC-4, Einar Otnes wrote:
>>>>
>>>> Thank you for your help on this. It seems that the 'jl_eval_global_var'
>>>> function is local as I got the error "undefined reference to
>>>> `jl_eval_global_var'" when linking. I replaced
>>>> your suggestion with:
>>>>
>>>>     jl_module_t* jl_dsp_module = (jl_module_t*)
>>>> jl_get_binding(jl_main_module, jl_symbol("DSP"));
>>>>     jl_function_t* func2 = jl_get_function(jl_dsp_module,"hanning");
>>>>
>>>> This compiles OK, but I get a "segfault  (core dumped)" when running
>>>> the line with 'jl_get_function' .
>>>>
>>>> Any ideas or thoughts?
>>>>
>>>> Thanks,
>>>>
>>>> Einar
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Sep 5, 2014 at 11:15 AM, Ivar Nesje <[email protected]> wrote:
>>>>
>>>>> I would guess that something like
>>>>>
>>>>> module = jl_eval_global_var
>>>>> <https://github.com/JuliaLang/julia/blob/6277015ee3d46f20149136d092525bec95b6e29d/src/julia.h#L917>
>>>>> (jl_main_module, jl_sym
>>>>> <https://github.com/JuliaLang/julia/blob/6277015ee3d46f20149136d092525bec95b6e29d/src/julia.h#L666>
>>>>> ("MyModule"))
>>>>>
>>>>> would work, but I don't have the required testing setup to see if it
>>>>> actually works. (Where is my C REPL?) The embedding API has not gotten 
>>>>> much
>>>>> attention (yet), so it is mostly documented in source, and it is likely
>>>>> that there will be some adjustments.
>>>>>
>>>>>
>>>>> On Friday, September 5, 2014 10:09:03 AM UTC+2, Einar Otnes wrote:
>>>>>>
>>>>>> Sorry, I'm a bit slow. How do I look up a binding for a specific
>>>>>> module? In other words, how would I explicitly get to call the "fftfreq"
>>>>>> function in the "DSP" module from C/C++?
>>>>>>
>>>>>> Is this this documented anywhere in Julia docs?
>>>>>>
>>>>>> Thanks,
>>>>>> Einar
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wednesday, September 3, 2014 3:10:59 PM UTC+2, Isaiah wrote:
>>>>>>>
>>>>>>> If you have defined a module already (by eval'ing julia code?) then
>>>>>>> you can look up the binding and cast that to a jl_module_t.
>>>>>>> On Sep 3, 2014 8:14 AM, "Einar Otnes" <[email protected]> wrote:
>>>>>>>
>>>>>>>> Dear experts,
>>>>>>>>
>>>>>>>> I've looking at the documentation " Embedding Julia" (
>>>>>>>> http://julia.readthedocs.org/en/latest/manual/embedding/) to
>>>>>>>> figure out how I can call my own julia functions from within C, and I'm
>>>>>>>> struggling to figure out how I should define the jl_module_t that
>>>>>>>> corresponds the module I've defined. The examples show that there is an
>>>>>>>> instance of jl_module_t,  "jl_base_module",  that you need to provide 
>>>>>>>> to be
>>>>>>>> able to call a function defined in the base module. How do I define a
>>>>>>>> corresponding jl_module_t type for the modules that are defined 
>>>>>>>> outside of
>>>>>>>> standard julia, e.g. for the external packages or the modules I have
>>>>>>>> created myself?
>>>>>>>>
>>>>>>>> Thanks for your help.
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>>
>>>>>>>> Einar Otnes
>>>>>>>>
>>>>>>>>
>>>>
>>
>

Reply via email to