Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Вниз.NET dll Найти похожие ветки
← →
Pit (2012-02-13 20:09) [0]Ребят, сейчас нет возможности проверить...
Допустим, имеем DLL, скомпилированную с помощью VS 2010 на c# под .NET 4.0
Что будет, если сделать над этой DLL функцию LoadLibrary(test.dll, ...), когда .NET на машине не установлен?
Получит ли DLL-ка хоть какое-то управление "внутрь" себя или LoadLibrary вернет 0... а какая тогда ошибка будет по GetLastError?
← →
icelex © (2012-02-13 20:43) [1]а что значит "хоть какое-то"?
← →
Pit (2012-02-13 23:50) [2]ну при аттачивании DLL в процесс - в ней в контексте потока запросившего LoadLibrary вызывается некая main функция в DLL. При загрузке в другом потоке в этом же процессе - тоже DLL уведомляется не помню уже каким - ATTACHE"м.
То есть, DLL прекрасно понимает, что ее загрузили, даже не вызвал ни одного метода.
Если же DLL скомпилена .NET языком - до нее управление дойдет как-то или функция LoadLibrary сама поймет, что DLL невозможно использовать и ругнется нулем... собственно, вот два вопроса выше сформулированы
← →
DVM © (2012-02-14 00:18) [3]
> Если же DLL скомпилена .NET языком - до нее управление дойдет
> как-то или функция LoadLibrary сама поймет, что DLL невозможно
> использовать и ругнется нулем
Ну как минимум из DLL выполнится код, который ответственен за загрузку CLR. Он выдаст ошибку.
← →
Pit (2012-02-14 00:35) [4]а что вернет LoadLibrary? ноль?
А расшифровку GetLastError тогда какую? ...
← →
Dimka Maslov © (2012-02-14 09:27) [5]LoadLibrary, скорее всего, таки загрузит модуль. Это не возбраняется. Вдруг мы модуль загружаем для тырения ресурсов. И GetProcAddress таки вернёт адрес функции, ибо это тоже не возбраняется. Вдруг мы хотим лишь проверить её существование. А вот уже вызов этого метода покажет по полной, что мы были не правы, пытаясь это сделать.
← →
Pit (2012-02-14 12:56) [6]
> LoadLibrary, скорее всего, таки загрузит модуль. Это не
> возбраняется. Вдруг мы модуль загружаем для тырения ресурсов
ну с тем же успехом можно предположить, что любая .NET"овская DLL тянет зависимость на системные .NET библиотеки. Соответственно, не загрузится, если на компьютере их нету.
С exe меня ситуация в свое время поразила. Когда запускаешь .NET экзешник на системе без framework"а, то пишется непонятная ошибка с кодом аля: 0xZZZZZZ, догадаться непросвященнному, что это не хватает .NET - нереально просто!! Бред какой-то... Даже виндовые приложение в DOS выкидывали сообщение типа "must win bla bla...".
Вот интересно, что с DLL, а проверить сейчас никак не могу.
← →
Dimka Maslov © (2012-02-14 13:16) [7]
> Соответственно, не загрузится
Соответственно, загрузится, но работать не будет.
← →
Pit (2012-02-14 13:19) [8]
> Соответственно, загрузится
эээ... ты уверен? По-моему, если DLL по секции импорта тянет за собой функцию из другой DLL, которую система не нашла, то никакой загрузки не произойдет, вернется null.
← →
Dimka Maslov © (2012-02-14 13:38) [9]А что мешает таки поставить эксперимент? Что же касается самого CLR, то она вроде как есть набор com-серверов, имеющих типовую таблицу импорта.
← →
Pit (2012-02-14 17:27) [10]а везде .NET стоит и удалять нельзя
← →
Dimka Maslov © (2012-02-14 17:32) [11]А раз он везде стоит, в чём проблема-то?
← →
icWasya © (2012-02-15 12:02) [12]Вот щас посмотрел - dll для NET с точки зрения нативного кода не экспортирует НИЧЕГО и импортирует _CorDllMain из mscoree.dll
← →
Pit (2012-02-15 13:38) [13]ага, а mscoree.dll это часть .NET.. То есть, исходя из этого LoadLibrary над нетовской DLL без установленного фреймворка просто вернет null.
Спасибо
← →
CRLF (2012-02-15 13:44) [14]
> Вдруг мы модуль загружаем для тырения ресурсов.
Для тырения ресурсов надо не LoadLibrary, а LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.057 c