[ expat-Patches-820946 ] expat.h not great for MSVC !cdecl deflt calling cnvntn
"SourceForge.net" <[email protected]>
| Newsgroups | gmane.text.xml.expat.bugs |
|---|---|
| Message-ID | <[email protected]> |
Patches item #820946, was opened at 2003-10-09 16:06 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=310127&aid=820946&group_id=10127 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: expat.h not great for MSVC !cdecl deflt calling cnvntn Initial Comment: OK, well the title I wanted was "expat.h doesn't work cleanly for MSVC with non-cdecl default calling convetion", but there were (reasonable, I guess) length limitations. In any case, if you have a project in MSVC that has its default calling convention set to something other than cdecl (such as stdcall or fastcall), the prototypes for the handler functions don't communicate that the library is compiled to assume cdecl. Things will still compile fine, however odd behavior occurs at runtime (for example, my start element handler was called 5 times with the same name and then the thread crashed). If your callback funcitons are then explicitly declared cdecl (as they should be) then you have to use casts to allow you to assign the address of your cdecl handler functions to the function pointers that the compiler defaults to the different convention. I don't suppose many people bother to change the default calling convention of their projects, but I have seen fastcall give a 5% boost. XML parsing is not a significant part of our apps exection time, so it's not worth recompiling expat to fastcall. It would be nice if it worked out of the box for us. I've supplied a patch, that defines a macro XMLCALLBACK for callbacks, much like the XMLPARSEAPI macro is defined for API functions. I've tested it with MSVC 7.1 projects that default to both stdcall and fastcall. Because the preprocessor tests are set up like the ones for the XMLPARSEAPI macro, I don't think it should affect any non-MSVC compilers. Thanks, Marsh Ray marsh *period* ray *atsign* barrsystems *period* com ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=310127&aid=820946&group_id=10127