|
Создание и загрузка dll-шек.
Загрузка и создание dll.
Чему посвящен данный типс видно из его названия, поэтому не буду вдаваться в пространные рассуждения и сразу перейду к содержательной части. Первая наша dll-шка не будет делать ничего экстраординарного:
|
extern "C" __declspec( dllexport ) void dll_func( char * str ){
MessageBox( 0 , str , 0 , 0 );
}
|
Здесь __declspec( dllexport ) говорит о том что это будет экспортируемая из dll функция, а extern "C" свидетельствует о том, что функции будут линковаться как в С.
Теперь озаботимся загрузкой функции из dll:
|
FARPROC GetDLLFunction( char * func_name , char * dll_name ){
HMODULE module;
FARPROC RET( NULL );
module = LoadLibrary( dll_name );
if( !module ){
MessageBox( 0 , «Ошибка загрузки DLL», 0 , 0 );
exit( 0 );
}
RET = GetProcAddress( module , func_name );
if( !RET ){
MessageBox( 0 , "Ошибка импорта функции!" , 0 , 0 );
exit( 0 );
}
return( RET );
}
|
В этой функции сначала грузится dll методом LoadLibrary (если дэлэлэшка уже загружена в память, то можно вызвать GetModuleHandle), затем выдираем адрес процедуры и преобразуем его в указатель на функцию нужного нам вида:
|
void ( * dll_func )( char * );
dll_func = (void(*)(char*))GetDLLFunction( "dll_func" , "new_dll.dll" );
dll_func( "testing dll" );
|
Вот собственно и все, после того как dll-шка Вам больше не нужна удаляем её с помощью функции FreeLibrary (хорошенько разберитесь с этим кодом, он нам скоро понадобится)!
|
|
|