Упростим загрузку DLLАвтор: Shoalin Panda ОписаниеОбычно Dynamic Link Librarys загружают следующим способом: LoadLibrary, и GetProcAddress затем проверяют, чтобы адрес каждой функции не был NULL, приведение указателя функции и т.д. Всё это конечно утомительно, но, оказывается есть более простой способ совладать с DLL-ками.
//GetProcAddresses //Argument1: hLibrary - Обработчик загружаемой библиотеки //Argument2: lpszLibrary - Загружаемая библиотека //Argument3: nCount - Количество загружаемых функций //[Arguments Format] //Argument4: Function Address - Адрес функции //Argument5: Function Name - Желаемое для нас имя функции //[Repeat Format] // //Returns: FALSE if failure //Returns: TRUE if successful BOOL GetProcAddresses(HINSTANCE *hLibrary,LPCSTR lpszLibrary,INT nCount,...) { va_list va; va_start( va, nCount ); if ( ( *hLibrary = LoadLibrary( lpszLibrary ) ) != NULL ) { FARPROC * lpfProcFunction = NULL; LPSTR lpszFuncName = NULL; INT nIdxCount = 0; while ( nIdxCount < nCount ) { lpfProcFunction = va_arg( va, FARPROC* ); lpszFuncName = va_arg( va, LPSTR ); if ( ( *lpfProcFunction = GetProcAddress( *hLibrary, lpszFuncName ) ) == NULL ) { lpfProcFunction = NULL; return FALSE; } nIdxCount++; } } else { va_end( va ); return FALSE; } va_end( va ); return TRUE; } Итак, теперь можно в функции main посмотреть, как это работает ( компилировалось как консольное приложение ) #include Вот собственно и всё.
|