MartinHepperle wrote:
> Hello all,
>
> again this nasty Java -> Octave connection.
>
> I also want to embed Octave into a Java program and call Octave functions
> from Java.
>
> Initially I started with programming an execution engine which starts
> octave.exe and connected to its standard input and output pipes. This
> concept works (in the meantime I also found two solutions which implement
> the same technique) but is somewhat ugly and inefficient due to conversions
> to and from strings
>
> What I tried now was to call the Octave DLLs (Windows platform) directly via
> a C wrapper and using JNI.
> This technique provides a very elegant solution and I have used this in the
> past to call C and FORTRAN codes from Java. I want to define some global
> variables, set the values from Java, execute some user supplied functions
> and finally return the results (global variables set inside the user
> functions) to Java.
>
> Now with the Octrave DLLs I stumbled across a problem.
>
> To study the interface to ther DLLs I started with a C++ program. 
> Basically I used the following logic:
>
> //-----------------------------
> // start and initialize Octave (once, then keep it alive)
> char * pArgs[] = {"octave.exe","--path", "C:\\Programme\\Octave", "--norc",
> NULL};
> int iRet = octave_main (4 pArgs, true);
>
> //-----------------------------
> // execute some commands
> std::string s = std::string("global Output;\nglobal
> Input;\nInput=12;\nOutput=2*Input;\n");
> octave_value x = eval_string (s, false, parse_status);
> // examine the returned "x" with x.isnumeric() etc. works when code is in an
> executable (.exe) file
>
> // what does the follwing code do? It works, but where is the variable in
> Octave?
> set_global_value (std::string(cName), val);
> octave_value vReturn = get_global_value (std::string(cName));
> // the variable has the correct value, but is_globally_visible
> (std::string(Name)) returns false...
> // what does global mean here?
>
>
>
> // terminate Octave
> do_octave_atexit();
> //-----------------------------
>
> All this works well when I have the code inside an executable C++ program
> (MSVC8.0).
>
> So far so good.
>
> Now for the interface via JNI I have to put this into a DLL which provides a
> thin layer between Java objects and the C interface to Octave.
> If I put the same code inside a DLL I can initialize Octave, but the
> eval_string () and other functions doe not work - they seem to do nothing. 
> I found can do somethings with set_global_value () and get_global_value (),
> but this is not enough and also these "global" values seem to be something
> else than global variables in Octave.
>
> Anyway, I see that eval_string() seems to work when called from a C
> executable, but not when I call it from a DLL. Could this have something to
> do with i/o streams which are different in a DLL and in an EXE?
>
> Any ideas where to look and how to test?
>
>
> Thank You,
>
> Martin
>
>
>
>
>   
eval_string can only work if the interpreter is initialized.. Check the 
mailing lists for how to initialize the interpreter.

D.


-- 
David Bateman                                [EMAIL PROTECTED]
Motorola Labs - Paris                        +33 1 69 35 48 04 (Ph) 
Parc Les Algorithmes, Commune de St Aubin    +33 6 72 01 06 33 (Mob) 
91193 Gif-Sur-Yvette FRANCE                  +33 1 69 35 77 01 (Fax) 

The information contained in this communication has been classified as: 

[x] General Business Information 
[ ] Motorola Internal Use Only 
[ ] Motorola Confidential Proprietary


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Octave-dev mailing list
Octave-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/octave-dev

Reply via email to