 |
|
SQL Server Tips by Burleson |
Exporting the function
To hide all of the details required to export the XP function from
the DLL, quite a lot of things need to be correct. In C++, you need
to ensure that your function uses ‘extern "C"’ to avoid name
mangling. You also need to use the Microsoft Visual C++ extension
‘__declspec(dllexport)’ to export the function or if this is not
available, then falling back to using a DEF file. To hide all of
these details, a pre-processor macro ‘IMPLEMENT_XP’ is provided. For
example, if your XP takes the following form in SDK style code:
extern "C" SRVRETCODE __declspec(dllexport)
XP_SAVEFILE(SRV_PROC *srvproc)
{
-------YOUR XP CODE-----
}
Then this would map to the following using the XP++ framework:
IMPLEMENT_XP(XP_SAVEFILE, CSaveFileStoredProcedure)
XP_SAVEFILE will be the name of the exported function and
CSaveFileStoredProcedure will be the class you develop which is
derived from CExtendedStoredProcedure (described later).
Support for __GetXpVersion
Support for this function is provided through the pre-processor
macro ‘IMPLEMENT_VERSION_XP()’. This simply adds the standard
boilerplate code for the __GetXpVersion function to your project.
IMPLEMENT_VERSION_XP is implemented as:
#define IMPLEMENT_VERSION_XP() \
extern "C" __declspec(dllexport) ULONG __GetXpVersion() \
{ \
return ODS_VERSION; \
}
The above book excerpt is from:
Super SQL
Server Systems
Turbocharge Database Performance with C++ External Procedures
ISBN:
0-9761573-2-2
Joseph Gama, P. J. Naughter
http://www.rampant-books.com/book_2005_2_sql_server_external_procedures.htm |