Как я могу обнаружить тип dll? (COM.NET, WIN32)

Это довольно просто действительно. Я знаю, что этому ответили, но я попробую еще раз, но попытаюсь сохранить его максимально простым.

деструктор А никогда не должен обычно использоваться. Это только выполняется, .net хочет, чтобы он работал. Это будет только бежать за мусором collectoin цикл. Это никогда не может на самом деле выполняться в течение жизненного цикла Вашего приложения. Поэтому Вы никогда не должны помещать код в деструктор, который 'должен' быть выполнен. Вы также не можете полагаться ни на какие существующие объекты в классе для существования, когда он работает (они, возможно, были уже очищены как порядок, в которых деструкторах, выполненных в, не гарантирован).

IDisposible должен использоваться каждый раз, когда у Вас есть объект, который создает ресурсы, которым нужна чистка (т.е., файл и графические дескрипторы). На самом деле многие утверждают, что что-либо, Вы вставляете деструктор, должно быть putin IDisposable из-за упомянутых выше причин.

Большинство классов будет звонить, располагают, когда финализатор выполняется, но это просто там как безопасность и никогда не должно полагаться. Необходимо явно расположить что-либо, что реализует IDisposable, когда Вы сделаны с ним. При реализации IDisposable необходимо звонить, располагают в финализаторе. См. http://msdn.microsoft.com/en-us/library/system.idisposable.aspx для примера.

14
задан Stein Åsmul 14 September 2009 в 10:22
поделиться

3 ответа

Вы должны проверить PE-заголовок этих файлов. Все DLL и исполняемые файлы, Win32 и .NET, имеют заголовок PE.

Углубленное изучение формата переносимого исполняемого файла Win32

Формат файла .NET

Переносимый исполняемый файл

5
ответ дан 1 December 2019 в 15:02
поделиться

Я не вижу лучшего способа сделать это. Однако, на 2., на самом деле, ответ отрицательный. Хосты среды выполнения почти наверняка также будут зависеть от mscoree.dll, и это не обязательно сборки .Net.

.Net dll имеют дескриптор COM, который можно найти с помощью dumpbin. Я не знаю, как получить эту информацию из кода.

Если вы программируете в .Net, один из способов определить, является ли сборка сборкой .Net, - это попытаться вызвать Assembly.LoadFrom (...).

Ну, это не настоящий ответ, а набор советов, на которые я бы хотел обратить внимание.

1
ответ дан 1 December 2019 в 15:02
поделиться

DllRegisterServer не требуется, единственный требуемый экспорт для COM dll - DllGetClassObject

5
ответ дан 1 December 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: