This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: accessing cygwin functions from non-cygwin app


On Tue, 26 Nov 2002 11:13:20 +0100, "Jan Beulich" <JBeulich@novell.com>
wrote:

>Hello,
>
>while I was trying to understand this on my own I'm ready to give up. All
>I intended was translating a coupld of filenames from cygwin to Win32 notation
>in an otherwise Win32-only app. I quickly realized that cygwin1.dll does not
>do all the necessary initialization on its own, i.e. from DllMain. Instead it
>appears that I am expected to explicitly call one or more functions inside the
>DLL to perform thisinitialization. However, whatever I tried (dll_crt0,
>dll_dllcrt0) didn't work (i.e. crashed due to insufficient prior initialization),
>but cygwin_attach_dll is neither exported from the DLL nor would it, from its
>use inside the sources, appear to be meant for the case I'm dealing with
>(where a main executaböle directly attaches to cygwin1.dll). And even if
>this is the function to use, then I have a problem using it as the application
>cannot be expected to have access to the perprocess class (nor is the app a
>C++ app, and neither is it being built with gcc) or other cygwin sources, and
>it also cannot link against libcygwin.a.
>Any advice on what I am missing here in this as I originally thought simple
>scenario would be very welcome - thank you in advance!

You need "cygpath". You have system(). You know the full path to
cygwin1.dll (either you supplied it or via ::GetModuleFileName or
registry mount "/") so can replace the explicit path in the crude
example below with the proper one...

int
main(int argc, char *argv[])
{const char sfx[]   ="j:/cygwin/bin/cygpath -wa ";
 char       cmd     [MAX_PATH + sizeof(sfx) + 1];

 if (argc < 2)
    return EXIT_FAILURE
 ;
 sprintf(cmd,"%s%s",sfx,argv[1]);
 system(cmd);
 return EXIT_SUCCESS; //ahem
}

...you'd probably want to programatically prefix your "j:/cygwin/bin" to
PATH prior to system(). If you go via the '-e' option of bash/sh then
you'd be able to use a wrapper script to convert more than one at once
or call your own cygwin app that invokes the relevent functions
directly.


-- 
swamp-dog@ntlworld.com

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]