Hello Troy,
Thursday, October 20, 2005, 10:49:18 PM, you wrote:
OK, then you will need to use the longjmp method.
I do not know what is "longjmp" method :-(
You should have an arrangement that looks something like this:
1. Your DLL that wants to call the Win32 API links to a "startwinelib.so" with an entry point "start_wine_lib_for_dll".
I do not have a DLL which wants to use the Win32 APIs. I have a Linux dynamic library (*.so) which wants to use the Win32 APIs.
2. "startwinelib.so" is a winelib app. "start_wine_lib_for_dll" would contain a "setjmp" followed by a call to wine_init, passing a dummied up argv that tells wine to start "startwinelib.so".
What is "setjmp" - an assembler directive ? Is <startwinelib.so> a standard WineLib application or I have to create it myself ?
3. WinMain in "startwinelib.so" does a longjmp back to "start_wine_lib_for_dll"
:-( What is "longjmp" exactly and how it should look like ? Unfortunatelly I'm not familiar with the assembler too much, and I know little about Wine :-(
3.1 Before calling Win32 entry points (other than those in the Win32 kernel) you will need to call LoadLibrary on the library they are in. This will ensure that Wine has initialised anything in the library that needs to be initialised.
Is LoadLibrary a Wine feature or Windows feature ?
4. From this point on you should be able to call the Win32 API as much as you like, even from files compiled with plain old gcc or g++.
This means that I link that magic <startwinelib.so> + other Win32 libraries which I need (like -lavifil32) to my Linux executable (or Linux dynamic library *.so) and everything will work out of box ? But what is the key point in this approach ? I do not use any functions in <startwinelib.so> - just link it to my Linux application and it will work ?!
5. You may need to set up an exception frame that does something like calling "exit" after printing a message about there being an unhandled exception.
Thank you very much.