1. Using shared objects
- Posted by Ron Weidner <nova812 at hotmail.com> Jun 02, 2005
- 533 views
- Last edited Jun 03, 2005
I have some shared object written in C. Below is the code. What I want is to write a euphoria include that maps the shared object to euphoria. What I'd like even more is if the share object could be distributed as part of the project and not necessarily "installed" on the host. (ie... no ldconfig). So my question is, does anyone have the time to show me how to do it? This is what I have ...
#include <stdlib.h> #define NUM_DOG 10 void mush(char**, int); int bark(); void mush(char* dogs[], int len) { int i = 0; printf("Number of dogs: %d \n", len ); for (i; i < len; i++) { printf("Dog named: %s starts mushing...\n", dogs[i]); } } int bark() { return 1; } This is what I want ... include dog.e if atom(bark()) then mush({"scooby", "dino", "astro", "spike"}) --notice the absence of arg 2 end if
2. Re: Using shared objects
- Posted by Vincent <darkvincentdude at yahoo.com> Jun 03, 2005
- 514 views
Ron Weidner wrote: > > > I have some shared object written in C. Below is the code. > What I want is to write a euphoria include that maps the > shared object to euphoria. > > What I'd like even more is if the share object could be > distributed as part of the project and not necessarily > "installed" on the host. (ie... no ldconfig). > > So my question is, does anyone have the time to show me > how to do it? > > This is what I have ... > > }}} <eucode> > #include <stdlib.h> > #define NUM_DOG 10 > > void mush(char**, int); > int bark(); > > void mush(char* dogs[], int len) > { > int i = 0; > printf("Number of dogs: %d \n", len ); > for (i; i < len; i++) > { > printf("Dog named: %s starts mushing...\n", dogs[i]); > } > } > > int bark() > { > return 1; > } > > This is what I want ... > > include dog.e > if atom(bark()) then > mush({"scooby", "dino", "astro", "spike"}) --notice the absence of arg 2 > end if > > <font color="#330033"></eucode> {{{ </font> > If I'm understanding correctly.. you want to interface those C routines with Euphoria? If so.. compile that code with your C compiler into a DLL or SO. Name it Dog.dll (Windows) or Dog.so (Linux/FreeBSD), then try this code:
-- File extention must be EXW or EXU. include dll.e atom dllBark, bark, mush dllBark = open_dll("Dog.dll") -- make a DLL/SO of that C code mush = define_c_proc(dllBark, "mush", {C_CHAR, C_INT}) bark = define_c_func(dllBark, "bark", {}, C_INT) if atom(c_func(bark, {})) then c_proc(mush, {"scooby", "dino", "astro", "spike"}) end if machine_proc(26, 0) -- pause
I didnt try making a DLL of that code, so their could be a error with my Euphoria code, but perhaps that will help you out, or maybe I'm way off :P. Regards, Vincent -- Without walls and fences, there is no need for Windows and Gates.
3. Re: Using shared objects
- Posted by Vincent <darkvincentdude at yahoo.com> Jun 03, 2005
- 519 views
Ron Weidner wrote: > > > I have some shared object written in C. Below is the code. > What I want is to write a euphoria include that maps the > shared object to euphoria. > > What I'd like even more is if the share object could be > distributed as part of the project and not necessarily > "installed" on the host. (ie... no ldconfig). > > So my question is, does anyone have the time to show me > how to do it? > > This is what I have ... > > }}} <eucode> > #include <stdlib.h> > #define NUM_DOG 10 > > void mush(char**, int); > int bark(); > > void mush(char* dogs[], int len) > { > int i = 0; > printf("Number of dogs: %d \n", len ); > for (i; i < len; i++) > { > printf("Dog named: %s starts mushing...\n", dogs[i]); > } > } > > int bark() > { > return 1; > } > > This is what I want ... > > include dog.e > if atom(bark()) then > mush({"scooby", "dino", "astro", "spike"}) --notice the absence of arg 2 > end if > > As a reminder, you need to make sure that your routines are exported to the compiled DLL by perhaps using "__declspec(dllexport)" (you can use #define and make a macro definition of that too) in front of the routine declarations. Regards, Vincent -- Without walls and fences, there is no need for Windows and Gates.
4. Re: Using shared objects
- Posted by Pete Lomax <petelomax at blueyonder.co.uk> Jun 03, 2005
- 555 views
On Thu, 02 Jun 2005 13:29:46 -0700, Ron Weidner <guest at RapidEuphoria.com> wrote: >I have some shared object written in C. Below is the code. Not entirely sure precisely what you mean by "shared object".. >What I want is to write a euphoria include that maps the >shared object to euphoria. The code below may or may not help. > >What I'd like even more is if the share object could be >distributed as part of the project and not necessarily >"installed" on the host. (ie... no ldconfig). My understanding of that is you want a file called dog.e that you can include in multiple projects rather than a dog.dll (or dog.so) which needs to be installed separately? > <snip> > mush({"scooby", "dino", "astro", "spike"}) --notice the absence of arg 2 The code below does not pass a length, is that what/all you meant?
--dog.e global procedure mush(sequence dogs) integer len len=length(dogs) printf(1,"Number of dogs: %d \n", len ) for i=1 to len do printf(1,"Dog named: %s starts mushing...\n", {dogs[i]}) end for end procedure global function bark() return 1 end function -- end of dog.e -- include dog.e if atom(bark()) then mush({"scooby", "dino", "astro", "spike"}) end if
Regards, Pete