2 VadiMGP и остальным:VadiMGP писал(а):я неграмотный программист
Извиняюсь, если мои фразы Вас как-либо оскорбили, я ни кого не хотел обижать и ни кого не хотел обвинять в безграмотности.
В этом же MSDN паписано:VadiMGP писал(а):Большинство моих знакомых программистов, которые пишут dll, независимо от их уровня грамотности, заглядывают в MSDN ... DllMain с параметром DLL_PROCESS_ATTACH вызывается только один раз для каждого процесса, а значит тут-то, как правило, и делают инициализацию всех данных
Я уверен, что Ghisler, как и Вы, тоже знает, чтоThe entry-point function should perform only simple initialization or termination tasks. It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions)… Similarly, the entry-point function must not call the FreeLibrary function (or a function that calls FreeLibrary) during process termination… Do not call the registry functions… do not call malloc… Calling imported functions other than those located in Kernel32.dll may result in problems that are difficult to diagnose. For example, calling User, Shell, and COM functions can cause access violation errors, because some functions in their DLLs call LoadLibrary to load other system components. Conversely, calling those functions during termination can cause access violation errors because the corresponding component may already have been unloaded or uninitialized…Because DLL notifications are serialized, entry-point functions should not attempt to communicate with other threads or processes. Deadlocks may occur as a result.
но, тем не менее, добавляет в интерфейс процедуру ContentPluginUnloading. Он объясняет это словамиDllMain с параметром DLL_PROCESS_ATTACH вызывается только один раз для каждого процесса
Т.е. не всегда возможна полная корректная инициализации и финализации в DllMain. Для этого есть ContentSetDefaultParams и ContentPluginUnloading. Повторюсь, что мы не знаем, какой код помещает разработчик в процедуры инициализации и финализации, которые, по его мнению, должны вызываться только один раз. И мы не знаем, к чему приведет их повторный вызов.This function was added by request from a user who needs to unload GDI+. It seems that GDI+ has a bug which makes it crash when unloading it in the DLL unload function, therefore a separate unload function is needed.
Я все же считаю, что попариться все стоит, что бы в конечном итоге получить рабочий при любых условиях продукт.VadiMGP писал(а):Я бы в данном случае не стал париться
Не допонял. Почему для того же dll? Ведь после копирования это физически будет другая dll.VadiMGP писал(а):Но эти дядьки не знают, что может прийти грамотный программист и скопировать dll в другую директорию, создав, тем самым, ситуацию, когда будет две попытки загрузить один и тот же dll из разных мест. Хотя ему, конечно, известно, что такое Dll Hell и, стопроцентно, он знает, что при этом DllMain с DLL_PROCESS_ATTACH будет вызван повторно для того же dll в том же процессе
Знаю, что решение с копирование плагина не самое лучшее, но оно рабочее. И именно для того, что бы найти более лучшее решение я и поднял этот вопрос.