The argument needs to be "mynumber" rather than "&mynumber"

(
http://docs.julialang.org/en/release-0.3/manual/calling-c-and-fortran-code/#passing-pointers-for-modifying-inputs
)

On Wed, Jul 8, 2015 at 8:55 AM, Panagiotis Mamatsis <[email protected]>
wrote:

> On Wednesday, July 8, 2015 at 3:03:39 PM UTC+3, Milan Bouchet-Valat wrote:
>>
>> Le mercredi 08 juillet 2015 à 04:56 -0700, Panagiotis Mamatsis a écrit
>>  :
>> > On Wednesday, July 8, 2015 at 2:45:17 PM UTC+3, Milan Bouchet-Valat
>> > wrote:
>> > > Le mercredi 08 juillet 2015 à 03:28 -0700, Panagiotis Mamatsis a
>> > > écrit
>> > >  :
>> > > > Hello to everyone,
>> > > >    i am a n00b in Julia language and i am trying to understand
>> > > the
>> > > > way to call code written in C via shared libraries. I have
>> > > started
>> > > > with a 'small scale' case into which i am trying to call a
>> > > function
>> > > > which returns void but accepts a pointer to an Integer. When i
>> > > > perform the call from a Julia script the number returned back is
>> > > "0"
>> > > > and not the one i am expecting...when i am calling the C function
>> > > the
>> > > > argument i am supplying is Ptr{Cint}. Can somebody please explain
>> > >
>> > > > what i am missing ?
>> > > Showing the code you tried would be helpful.
>> > >
>> > > Anyway, this precise case is documented. Let us know whether that's
>> > >
>> > > enough to fix your problem. For 0.3:
>> > > http://docs.julialang.org/en/release-0.3/manual/calling-c-and
>> > > -fortran
>> > > -code/#passing-pointers-for-modifying-inputs
>> > >
>> > > For 0.4 (a bit different):
>> > > http://docs.julialang.org/en/latest/manual/calling-c-and-fortran
>> > > -code/#passing-pointers-for-modifying-inputs
>> > >
>> > >
>> > > Regards
>> > Hi Milan and thank you so much for your quick response. I didn't
>> > keyed in my source code because i don't want to burden people by
>> > reading source code. :)
>> > Anyway...here is my little Julia script:
>> >
>> > mynumber=convert(Cint, 0)
>> > ccall((:funct1, "./libtest.so"), Void, (Ptr{Cint},), &mynumber)
>> > println(mynumber)
>> >
>> > My C code:
>> > void funct1(int *i){
>> >    *i=5;
>> > }
>> >
>> > The environment i am using is Linux (Ubuntu flavor) and the version
>> > of Julia is 0.3.10.
>> >
>> > I have read the documentation of Julia for callign external functions
>> > of C and Fortran but it seems that i am missing something !
>> You probably missed the interesting part in the middle of the long
>> docs. In the link I gave you, you'll see that something like this
>> should work:
>>
>> mynumber = Cint[0]
>> ccall((:funct1, "./libtest.so"), Void, (Ptr{Cint},), &mynumber)
>>
>> The reason is that an immutable (like an Int) has no 'individual'
>> existence nor storage: 5 is always equal to 5, and it doesn't make
>> sense to change it to be equal to 3. So you need to create a one
>> -element array and modify this location.
>>
>>
>> Regards
>>
>
> Hi Milan,
>    following up on your reply, i have tried this but i am getting a
> conversion error as following:
>
>  `convert` has not method matching convert(::Type{Int32}, ::Array{Int32,1})
>
> Any suggestions ?
>
> Best regards and
> thanks in advance,
> Panos.
>
>

Reply via email to