RE: Making DLL's with Eu
- Posted by Matthew Lewis <matthewwalkerlewis at YAHOO.COM> Mar 14, 2001
- 542 views
> -----Original Message----- > From: Grape Vine [mailto:g__vine at hotmail.com] > > Could anyone kindly post a fully working example of making > dlls with Eu > and Bcc?? Once i see who/what/when/why/where I think i can do it =) > I am looking to make DLL's for mirc so a working example for > mirc would > be best(as i am unsure how to pass args to/from mirc to a eu dll > correctly(i know how to pass args from mirc to a dll(i belive)) I can't help you with mirc specifically, but here's what I've been able to do with bcc. All of the procedures you'll be exporting should take atoms/integers as params. I suppose objects will work as well, but, of course, you could only pass a sequence from another routine in the DLL. You'll need to add some dummy calls to the routines to export, or the translator will optimize them away. Here's what I've been doing: global function SQLAllocHandle( atom htype, atom parent ) .. end function ? SQLAllocHandle( rand(500), rand(500) ) Once you've debugged and added the dummy calls, translate with ecw. There are a few changes you'll need to make. First, change main_.c void WinMain( .......) to int _stdcall _export LibMain( void *hInstance, int Reason ) Then comment out the parts in LibMain that deal with either argv or argc (since there will be no command line arguments). Now you need to remove the dummy calls from LibMain. If you're registered, it should be easy to find them. Otherwise, look for all the calls to the functions, and comment that out, or delete. You'll also need to get rid of Cleanup(0);. If you have a big program (like maybe you're using win32lb), you may have to look in main_1.c, main_2.c, etc for this stuff. Technically, you should probably put all of this within a switch statement to check for Reason = DLL_PROCESS_ATTACH, but it seems to work ok without doing this. Then you need to open up the c file generated that contains the routines you want to export. I like to rename the functions, since the _[filenum] is added. If you do this, just make sure that if any renamed functions are called within your code that you fix those calls, as well. Then add _stdcall _export to the declaration, between int and the function's name: int _stdcall _export SQLAllocHandle( int _htype, int _parent ) Open up emake.bat, and change the command line option '-tW' to '-tWD'. This tells bcc to create a DLL instead of an EXE. I've found that if you treat an atom as a pointer in Euphoria, it's fine when translated to C. You'll have to consult the mirc API for specifics on how to interact with it. Matt Lewis