Итересует в какой момент происходит загрузка ДЛЛ и выгрузка?
Если загрузка работает, т.е. ДЛЛ загружается и LaserScannerSomeFunction выполняется, то вот с выгрузкой проблемы . MessageBox — никогда не выкидывается. Как произвести выгрузку ДЛЛ?
_>Итересует в какой момент происходит загрузка ДЛЛ и выгрузка? _>Если загрузка работает, т.е. ДЛЛ загружается и LaserScannerSomeFunction выполняется, то вот с выгрузкой проблемы . MessageBox — никогда не выкидывается. Как произвести выгрузку ДЛЛ?
_>З.Ы.: или вообще чушь порю?
Если я не ошибаюсь, то когда ты подключаешь dll таким образом (через lib файл) то загрузка происходит перед( ) запуском программы, а выгрузка после её завершения (наверное как мусор чистится). Если желаешь их выгружать попробуй писать:
_>Итересует в какой момент происходит загрузка ДЛЛ и выгрузка? _>Если загрузка работает, т.е. ДЛЛ загружается и LaserScannerSomeFunction выполняется, то вот с выгрузкой проблемы . MessageBox — никогда не выкидывается. Как произвести выгрузку ДЛЛ?
_>З.Ы.: или вообще чушь порю?
Попробуйте в мессадж боксе первым параметром поставить 0 — после этого IMHO сообщение должно появляться
Здравствуйте, frozen83, Вы писали:
F>Здравствуйте, bel_nikita, Вы писали:
F>Если я не ошибаюсь, то когда ты подключаешь dll таким образом (через lib файл) то загрузка происходит перед( ) запуском программы, а выгрузка после её завершения (наверное как мусор чистится). Если желаешь их выгружать попробуй писать:
F>HMODULE LoadLibrary( F> LPCTSTR lpFileName F>);
F>и
F>FARPROC GetProcAddress( F> HMODULE hModule, F> LPCSTR lpProcName F>);
F>и
F>BOOL FreeLibrary( F> HMODULE hModule F>);
Если нужно принудительно выгрузить то не LoadLibrary, а GetModuleHandle. Иначе FreeLibrary тока уменьшит счетчик загрузок.
Код который точно должен работать:
Здравствуйте, bel_nikita, Вы писали:
_>Неа, нету мессадж бокса
Calling Win32 functions other than TLS, object-creation, and file functions may result in problems that are difficult to diagnose. For example, calling User, Shell, COM, RPC, and Windows Sockets functions (or any functions that call these functions) can cause access violation errors, because their DLLs call LoadLibrary to load other system components. While it is acceptable to create synchronization objects in DllMain, you should not perform synchronization in DllMain (or a function called by DllMain) because all calls to DllMain are serialized. Waiting on synchronization objects in DllMain can cause a deadlock.
Здравствуйте, BlackHeretic, Вы писали:
BH>Если нужно принудительно выгрузить то не LoadLibrary, а GetModuleHandle. Иначе FreeLibrary тока уменьшит счетчик загрузок. BH>Код который точно должен работать:
BH>
SDB>Calling Win32 functions other than TLS, object-creation, and file functions may result in problems that are difficult to diagnose. For example, calling User, Shell, COM, RPC, and Windows Sockets functions (or any functions that call these functions) can cause access violation errors, because their DLLs call LoadLibrary to load other system components. While it is acceptable to create synchronization objects in DllMain, you should not perform synchronization in DllMain (or a function called by DllMain) because all calls to DllMain are serialized. Waiting on synchronization objects in DllMain can cause a deadlock.
Ничего не понял Понял, что у меня может быть много проблем, виалейшинов. Понял, что в ДллМайн синхронизационные объекты вставлять нельзя. Но так не понял почему не выскакивает Мессадж бокс при выходе Да и LoadLibrary у меня в программе нигде нет, точнее есть, но это уже компилятор делает за меня
Здравствуйте, bel_nikita, Вы писали:
_>Ничего не понял Понял, что у меня может быть много проблем, виалейшинов. Понял, что в ДллМайн синхронизационные объекты вставлять нельзя. Но так не понял почему не выскакивает Мессадж бокс при выходе
Потому что поведение винды при вызове функций из user32.dll (к коим относится и MessageBox) является... м-м-м... неопределенным — может показать, может не показать, может вообще процесс повесить.
SDB>Потому что поведение винды при вызове функций из user32.dll (к коим относится и MessageBox) является... м-м-м... неопределенным — может показать, может не показать, может вообще процесс повесить.
Мучался я както, пытался создавать/удалять класс в DllMain при загрузке \ выгрузке да так и бросил. Такое впечатление что DllMain либо вообче не выполняется. либо какимто якорем выполяется в отдельном потоке...