2013-03-29 2 views
3

Как я могу в программе определить, управляется ли DLL или неуправляемым кодом? Мы используем this code, чтобы убедиться, что все наши управляемые DLL - это MSIL. Но он генерирует исключение из неуправляемых DLL, поэтому мне нужно сначала проверить, управляется ли DLL.Как я могу программным образом определить, управляется ли DLL или неуправляемым?

+0

Как часто вы делаете это? Иногда вам просто нужно обрабатывать исключение и двигаться дальше, я не знаю, есть ли простой (исключительный) способ решить эту проблему. –

+0

@ScottChamberlain Он находится в процессе сборки, поэтому не большой удар по времени. Мне просто не нравятся исключения, когда код работает как ожидалось. –

+1

@DavidThielen Есть способы сделать это, но это немного сложно, так как нет прямого API. Лично, поймать исключение - это тот подход, который я бы взял, потому что он просто легкий и чистый ... –

ответ

4

Простейшим вариантом, скорее всего, будет просто попытаться открыть файл так, как вы есть, и поймать исключение. Любая неуправляемая сборка выдает исключение на Assembly.LoadFrom.

Однако, если вы хотите определить это более строго, вам нужно будет изучить заголовок PE для получения соответствующей информации самостоятельно. Это article describes the process в деталях, но для этого требуется проверка структуры заголовка PE DLL в IMAGE_OPTIONAL_HEADER.

+0

Они уверены, что не делают так просто :) Спасибо –

+0

@DavidThielen Нет - к сожалению, нет простого API для этого , даже на родной стороне. –

+0

@DavidThielen, прежде чем вы начнете кодировать способ сделать это, подумайте о времени. Если обработка исключения добавляет, возможно, 2 мс к времени сборки вместо того, чтобы писать способ разбора PE-заголовка, просто делайте небольшую математику, если '(время, затраченное на запись обработчика/разницу во времени между обработкой исключений и обнаружением) <количество построений в жизнь программы не стоит делать. –

Смежные вопросы