|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Using Run-Time Dynamic Linking
You can use the same DLL in both load-time and run-time dynamic linking. The following source code produces the same output as the load-time example in the previous section. The program uses the LoadLibrary function to get a handle of MYPUTS.DLL. If LoadLibrary succeeds, the program uses the returned handle in the GetProcAddress function to get the address of the DLL's myPuts function. After calling the DLL function, the program calls the FreeLibrary function to unload the DLL.
The following example illustrates an important difference between run-time and load-time dynamic linking. If the MYPUTS.DLL file is not available, the application using load-time dynamic linking simply terminates. The run-time dynamic linking example, however, can respond to the error.
// File: RUNTIME.C // A simple program that uses LoadLibrary and // GetProcAddress to access myPuts from MYPUTS.DLL. #include #include typedef VOID (*MYPROC)(LPTSTR); VOID main(VOID) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; // Get a handle to the DLL module. hinstLib = LoadLibrary("myputs"); // If the handle is valid, try to get the function address.
if (hinstLib != NULL) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); // If the function address is valid, call the function. if (fRunTimeLinkSuccess = (ProcAdd != NULL)) (ProcAdd) ("message via DLL function\n"); // Free the DLL module. fFreeResult = FreeLibrary(hinstLib); } // If unable to call the DLL function, use an alternative. if (! fRunTimeLinkSuccess)
printf("message via alternative method\n"); }
Because the program uses run-time dynamic linking, you should not link with the import library when creating the program module.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Использование Динамической Связи Run-Time
Вы можете использовать тот же DLL как в нагрузке-времени так и времени прогона динамической связи. Следующий исходный код производит тот же выход как нагрузку-время примера в предшествующей секции. Программа использует функцию LoadLibrary, чтобы получать ручку MYPUTS.DLL. Если LoadLibrary добивается успеха, программа использует возвращанную ручку в функции GetProcAddress, чтобы получать адрес функции DLL's myPuts. После вызова функции DLL, программные вызовы функция FreeLibrary, чтобы снимать DLL.
Следующий пример иллюстрирует важному различию между временем прогона и нагрузка-время динамической связи. Если файл MYPUTS.DLL не доступен, приложение, использовавшее нагрузку-время динамической связи просто завершается. Время прогона динамической связи примера, тем не менее, может среагировать на ошибку.
// Файл: RUNTIME.C // A Простая программа, которая использует LoadLibrary и // GetProcAddress, чтобы иметь доступ к myPuts из MYPUTS.DLL. #include #include typedef ПУСТОТА (*MYPROC)(LPTSTR); НЕДЕЙСТВИТЕЛЬНАЯ основа(ПУСТОТА) { HINSTANCE hinstLib; MYPROC ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = ЛОЖЬ; // Получите ручку в модуль DLL. hinstLib = LoadLibrary("myputs"); // Если ручка - в силе, пытайтесь получать функциональный адрес.
если (hinstLib != НЕДЕЙСТВИТЕЛЬНЫЙ) { ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); // Если функциональный адрес - в силе, назовите функцию. если (fRunTimeLinkSuccess = (ProcAdd != НЕДЕЙСТВИТЕЛЬНЫЙ)) (ProcAdd) ("сообщение через DLL function\n"); // Свободный модуль DLL. fFreeResult = FreeLibrary(hinstLib); } // Если не в состоянии вызвать функцию DLL, используйте альтернативу. если (! fRunTimeLinkSuccess)
printf("message через альтернативу method\n"); }
Поскольку программа использует время прогона динамической связи, вам не следует связать с импортной библиотекой при создании программного модуля.
|
|
|
|
| |