/* Name: dlls_em_c.txt Copyright: none Author: dvdscripter (dvdscripter@gmail.com) Date: 15/07/05 14:01 Description: criando e usando dlls em C (basico) */ Teoreba: DLL vem de Dynamic-link library, usamos dlls principalmente para que nao tenhamos que "invertar a roda" td vez que precisamos chamar funcoes que serao chamadas por varios arquivos. Usando pratica: O exemplo aqui foi compilado no Dev-C++ 4.9.8.0. // gcc load.c -o load -mwindows #include main (){ HMODULE hDll; long *(*funcPtr)(); // ponteiro para o endereco da funcao que sera carregado hDll = LoadLibrary("kernel32.dll"); // carrega kernel32.dll funcPtr = GetProcAddress(hDll,"Beep"); // endereco da funcao Beep no ponteiro funcPtr(200,2000); // 2 parametros 200 = frequencia em hertz e 2000 = duracao FreeLibrary( hDll ); // descarrega } Ao compilar tera um warning na linha 6 porque nao usei cast... ignore Execute e escute um zumbido bem chato mas que serve como exemplo. Como podemos ver com poucas linhas se pode carregar. Criando: Eu usei a propria proposta de projeto do Dev-C++ para criar. // dllmain.c /* Replace "dll.h" with the name of your header */ #include "dll.h" #include #include #include DLLIMPORT void HelloWorld (char *p) { MessageBox (0, p, "Hi", MB_ICONINFORMATION); } BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } Esse e o arquivo principal da dll onde fica as funcoes e tals. // dll.h #ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ DLLIMPORT void HelloWorld (char *p); #endif /* _DLL_H_ */ Agora salve e compile o projeto porque iremos mostrar como carregar sua dll. #include main (){ HMODULE hDll; long *(*funcPtr)(); hDll = LoadLibrary("1dll.dll"); // 1dll.dll e o nome que eu escolhi pra dll funcPtr = GetProcAddress(hDll,"HelloWorld"); // funcao que existe na dll funcPtr("É legal isso"); // parametro da funcao HelloWorld FreeLibrary( hDll ); // descarrega } Conclusao: Nao e um bixo de sete cabecas ate que foi bem simples na proxima edicao irei mostrar como criar dlls no Visual C++ 6 (to baixando) e fazer seu mIRC (caso use) carregar essas dlls fazendo seu mIRC ter mais algumas funcoes especiais. O texto nao fico muito decente Referencia: http://www.bloodshed.net // Dev-C++ ftp://ftp.cs.virginia.edu/pub/lcc-win32/win32hlp.exe //grande help recomendo http://www.inside3d.com/dll/dll_dll_in_c.shtml //me ajudo bastante Agradecimentos: Ao pessoal do motdlabs otimo trabalho, ao blow por me estimula FULIGEM, overdate, eriba, proedes, hipnos_, ..., ao SME_fofinho do nosso THB, o grande amigo _OZ_ la do hacker, o fredbsd, e ao resto do povo que minha memoria esqueceu []'s.