Professional Documents
Culture Documents
O Microsoft Visual C++ (MSVC) prov vrias extenses ao C++ padro, o que permite que funes sejam importadas ou exportadas diretamente no cdigo. Este modelo foi adotado por outros compiladores C e C++ para Windows, incluindo a verso windows do GCC. Essas extenses usam o atributo __declspec antes de uma declarao de funo. Quando nomes externos seguem as convenes de nomes do C, eles tambm devem ser declarados como extern "C" no cdigo em C++, para prevenir o uso das convenes de nomes do C++. Alm da especificao das funes como importadas ou exportadas ao usar os atributos da __declspec, elas podem ser listadas nas sees IMPORT ou EXPORTS do arquivo DEF usado pelo projeto. Este arquivo processado pelo linker, e no pelo compilador, e portanto no especfico do C++. A compilao de DLL gerar um arquivo DLL e um LIB. O LIB usado para a ligao de uma DLL em tempo de compilao; ele no necessrio para a ligao em tempo de execuo. A no ser que sua DLL seja um COM server, o arquivo DLL deve ser colocado em um dos diretrios listados na varivel de ambiente PATH, ou no diretrio de sistema padro, ou no mesmo diretrio do aplicativo. As DLL COM servers so registradas usando o regsvr32.exe, que coloca a localizao e seu ID global nico (GUID) no registro. Os programas podem ento usar a DLL se buscarem pelo seu GUID no registro para acharem sua localizao.
Criando DLL
Os exemplos seguintes mostram os maneiras especficas de exportao de DLL. C e C++
#include <windows.h> // Exporta esta funo extern "C" __declspec(dllexport) double SomaNumeros(double a, double b); // funo de inicializao da DLL BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return TRUE; } // Funo que soma dois nmeros double SomaNumeros(double a, double b) { return a + b; }
// Chama funo. resultado = SomaNumeros(1, 2); // Descarrega arquivo DLL FreeLibrary(hinstLib); // Mostra o resultado printf("O resultado : %f\n", resultado); return 0; }