[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] EVENT2_MS_CALLING_CONVENTION Macro Suggestion



On 2/3/2016 01:56, Shao Miller wrote:
Hello, libevent mailing-list.

Here[1] are some steps which helped me to build libevent with
Microsoft Windows XP.

The only quirk I've discovered so far is that when I want to use the
Windows DDK's "BUILD" program to build a libevent-consuming project, I
run into calling convention mismatching...  By default, BUILD seems to
want to give /Gz to the compiler, which specifies __stdcall as the
default calling convention for functions.  Unfortunately, the steps[1]
that I used resulted in a libevent DLL using the __cdecl calling
convention.  The compiler would want /Gd, for that.

So what happens is that only one of these will be linked:
- libevent (via __cdecl)
- Winsock2 (ws2_32, via __stdcall)

In a BUILD "sources" file, one can use the following line to request /Gd:

  386_STDCALL=0

But that doesn't help with Winsock2.

Fortunately, Winsock2's header uses WSAAPI to mark the calling
convention for its functions.  That preprocesses as "FAR PASCAL", so
the following ugly hack gets libevent and Winsock2 to play nicely with
BUILD:

  #ifndef WIN32
  /* ... */
  #else
  #include <windows.h>
  #define PASCAL __stdcall
  #include <winsock2.h>
  #endif

The build-log will warn about a redefinition of PASCAL, but oh well.

Does anyone think it might be worth-while to introduce an
EVENT2_MS_CALLING_CONVENTION macro between the return-type and
identifier for each libevent function?  (That's where Microsoft wants
it, if I recall correctly.)  Or, if all other implementations use the
same convention for the location of such a calling-convention
extension, perhaps EVENT2_CALLING_CONVENTION. Hooray for clutter?

(Another way to ask is, "Would anyone object to...")

[1] https://www.synthetel.com/libevent-xp

Is it useful for me to continue waiting for an answer to this question?

--
Shao Miller
Synthetel Corporation
W: https://www.synthetel.com
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.