Restrictions for developing a user mapping plug-in (C programming language)

When you develop user mapping plugs-in in C, keep these restrictions in mind.

C-linkage
The plug-in library must be linked with C-linkage. Header files that provide the prototypes, data structures needed to implement the plug-in, and error code definitions are provided for C/C++ only. Functions that will be resolved at load time must be declared with extern "C" if the plug-in library is compiled as C++.
.NET common language runtime is not supported
The .NET common language runtime (CLR) is not supported for compiling and linking the source code for the plug-in library.
Signal handlers
The plug-in library must not install signal handlers or change the signal mask because doing so interferes with the reporting and recovering from errors. The plug-in library must never raise C++ exceptions.
Thread-safe
The plug-in library must be thread-safe and re-entrant. Only the plug-in initialization is not required to be re-entrant. The plug-in initialization function can potentially be called multiple times from different threads, in which case, the plug-in cleans up all used resources and reinitializes itself.
Overriding standard C library and operating system calls
The plug-in library must not override standard C library and operating system calls.
32-bit and 64-bit applications
A 32-bit federated server must use a 32-bit plug-in. A 64-bit federated server must use a 64-bit plug-in. In a hybrid instance, where the client is 32-bit and the server is 64-bit, the plug-in must be 64-bit.
Text strings
Input strings are not guaranteed to be null-terminated, and output strings are not required to be null-terminated. Instead, integer lengths are given for all input strings, and pointers to integers are given for lengths to be returned.