delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2002/07/23/20:47:17

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Message-ID: <3D3DF9A3.7090900@msu.edu>
Date: Tue, 23 Jul 2002 20:49:39 -0400
From: Harold L Hunt II <huntharo AT msu DOT edu>
User-Agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.1b) Gecko/20020717
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: How to call *windows* functions in a cygwin c program
References: <20020724001615 DOT 36382 DOT qmail AT web10106 DOT mail DOT yahoo DOT com>

Sylvain Petreolle wrote:
> Hi,
> 
> working on the mplayer mproject (http://www.mplayerhq.hu),
> I need to load DLLS into a C program, read some registry values
> and misc.
> 
> where could I find some doco on making windows API calls ?
> 
> (I found some in the faq at Programming Questions/How do I use Win32
> API calls, but need some more info)
> 

I think your best bet may be to look at how we do this in 
Cygwin/XFree86.  Our header file that includes the Windows headers is here:

http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xwin/winms.h


If you want to have the libraries linked at compile time, then you just 
need to add any Windows libs to the final link line for your executable, 
such as '-luser32' or '-lgdi32'.

To find the name for the '-l_xxx_' parameter, you just look at the MSDN 
Library docs for a given function and right at the bottom it says, for 
example, ``Library: Use Gdi32.lib.''  So, you take a peek in /lib/w32api 
and make sure that there is a file called libgdi32.a, then you add the 
portion of the filename after the lib and before the .a to a ``-l'' 
parameter, such as ``-lgdi32''.  That's it.  My example function here is 
BitBlt, which is documented here:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_0fzo.asp


The head of the MSDN Library is here:

http://www.msdn.microsoft.com/library/default.asp

Though, it is often easier to find functions in the library via Google 
(www.google.com), using a search restricted to www.msdn.microsoft.com.


On the other hand, if you want to check for a non-standard library 
function (such as one that is only available in Windows 2000 or later), 
then you need to use LoadLibraryEx to try to load the DLL, then you 
query for a function of the given name using GetProcAddress.  If the 
function is available, you are good to go, otherwise GetProcAddress will 
return NULL.  In which case you call FreeLibrary to close the library 
and unload it from memory.  Of course, you also need to call FreeLibrary 
when you are done using the function pointer that you obtained (either 
when your program shuts down, or when it changes into a mode where a 
given module will no longer be useful for a good amount of time (several 
minutes)).  You can see an example of the loading of a function pointer 
all the way at the bottom of InitOutput.c:

http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xwin/InitOutput.c?rev=1.29&content-type=text/x-cvsweb-markup


There we load a pointer for _TrackMouseEvent.  Do not let the variable 
name mislead you.  There are two mouse tracking functions in the Win32 
API.  One is called TrackMouseEvent and is only available in some 
version of Windows after Windows 95 (I don't remember when it was 
introduced) and there is the _TrackMouseEvent function which is 
installed with IE 3.0 or 4.0.  _TrackMouseEvent simply calls 
TrackMouseEvent if it is there, or it emulates its functionality if it 
is not there.  Thus, we are calling _TrackMouseEvent in Cygwin/XFree86, 
but I called the variable for the function pointer g_fpTrackMouseEvent 
instead of g_fp_TrackMouseEvent, just because the former was less ugly 
than the latter.

I hope that helps.

Harold


--
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/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019