On 10/29/2012 02:05 PM, 高健 wrote: > On /src/include/storage/proc.h: > > I saw the following line: > > extern PGDLLIMPORT PGPROC *MyProc; > > I want to know why PGDLLIMPORT is used here? > > Does it mean: exten PGPROC *MyProc; right? What platform are you working on? On Windows it's required to allow the static linker to generate the correct symbol tables and the runtime/dynamic linker to correctly link binaries. See: http://support.microsoft.com/kb/132044 http://msdn.microsoft.com/en-us/library/8fskxacy(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/a90k134d(v=vs.80).aspx For other platforms the same macros can be used for symbol visibility filtering, but are usually set to evaluate to nothing so they have no effect. "extern" is always implicit for a prototype in a header, so while that declaration does mean "extern PGPROC *MyPRoc;" that's nothing to do with the PGDLLIMPORT macro. -- Craig Ringer -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general