Microsoft KB Archive/103244

INF: Example of Importing Functions PSS ID Number: Q103244 Article last modified on 04-23-1994

3.10

WINDOWS NT

= SUMMARY =

NOTE: This article deals specifically with the Linker shipped with the Win32 SDK, which is the current linker for MIPS and Alpha only.

The linker does not take a .DEF file directly. To use EXPORTS, it is standard to build an export module (.EXP) to link with the dynamic-link library (DLL), and to use an import library (.LIB) to link with any application or DLL that uses this DLL.

There are alternatives to an import library. One alternative is to use LoadLibrary and GetProcAddress to call an exported DLL function. Another alternative is to build an import module (.IMP) using the steps described below:

  Create the .DEF file. The following is based on the SELECT example. Note that it is necessary to decorate the names and include one dummy export. The __stdcall functions have an appended “@ ”, where is the number of bytes in the parameter list for the function. The linker automatically handles the underscore, which is prepended to __cdecl and __stdcall function names. NAME Demo EXPORTS DemoWndProc@12 IMPORTS select.StartSelection@16 select.UpdateSelection@16 select.EndSelection@8 select.ClearSelection@12   Build the .IMP file: $(PROJ).imp: $(PROJ).def $(implib) -machine:$ (CPU)

-def:$(PROJ).def \ -out:$ (PROJ).lib   Link the .IMP file into the application: $(PROJ).exe: $(PROJ).obj $(PROJ).rbj $(PROJ).def $(PROJ).imp $(link) $(linkdebug) $(guiflags) \ -out:$ (PROJ).exe $(PROJ).obj $(PROJ).rbj

$(PROJ).imp $(guilibsdll) 

= MORE INFORMATION =

If building a DLL, another interesting technique is to use forwarders. For example, the following

LIBRARY test

EXPORTS MyFunc = prvtdll.DllFunc

will expose MyFunc as an export for TEST.DLL. However, the loader will actually fix up the reference at load time to point to DllFunc in PRVTDLL.DLL. This method involves no additional code.

Another way to provide a forwarder is to write a stub function, which you do export, that forwards the reference for you. On DLL PROCESS_ATTACH, do LoadLibrary(prvtdll), then GetProcAddress on DllFunc. In your forwarder function, just call through with the arguments passed to you.

Additional reference words: 3.10 KBCategory: Prg KBSubcategory: TlsMisc

=
================================================================

Copyright Microsoft Corporation 1994.