Создание и загрузка 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 (хорошенько разберитесь с этим кодом, он нам скоро понадобится)!
© 2004-2005 Savardge.ru


Hosted by uCoz