Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 09:25   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию DllImport, момент связывания, отсутствие dll.

в общем такой вот вопросик, есть класс содержащий в себе private static процедуры импортированые из dll.
вопрос когда происходит связывание с длл?
при создании этого класса(подходит, но как ловить отсутствие оной длл?)
или же при загрузке сборки?(не подходит, так как в ней не один класс.)

или же поступить в этом случае?(в крадце ситуация такая что есть сборка содержащая не один класс, многие классы используют DllImport, и нужно чтоб в общем сборка работала, но классы у которых импорт не прошел, нельзя было создать(исключение в конструкторе например))

ЗЫ: сборка - библиотека классов.

или правильнее сделать самостоятельную динамическую загрузку длл и не париться?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 17.03.2011 в 10:31.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.03.2011, 17:02   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

дык при вызове функции линкуется
Это же легко проверить
Код:
    class Program
    {
        [DllImport("test.dll")]
        private static extern void Method();
        static void Main( string[] args )
        {
            Method();
эксепшен вылезет только при вызове, а не при загруке/создании класса
m0nax вне форума Ответить с цитированием
Старый 17.03.2011, 17:27   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит:
Код:
class MyClass
{
    [DllImport("test.dll")]
    private static extern void ExtMethod();
    MyClass()
    {
        try
        {
            ExtMethod();
        }
        catch(Exception)
        {
            throw new Exception("Вызов ExtMethos из test.dll провалился");
        }
    }
}
при попытке выполнения new MyClass вылетит мое исключение?(если длл нету)
а если длл есть то класс успешно создастся?

я просто на всякий уточнить хочу

ЗЫ: я просто не на рабочей машине сейчас, потому хотел спросить знающих.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.03.2011, 21:46   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Ну да, только лучше заменить catch(Exception) на catch(DllNotFoundException)
Так будет ловиться именно отсутствие дллки, а не вообще любые ошибки
m0nax вне форума Ответить с цитированием
Старый 17.03.2011, 23:36   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как все чудно оказалось то
спасибо большое.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идея связывания двух программ по TCP\UDP Ruschel Общие вопросы C/C++ 0 06.07.2010 13:23
Хеширование на основе блочного связывания triasoft Фриланс 1 05.07.2010 16:25
DllImport + C/C++ BOBAH13 Общие вопросы .NET 2 05.01.2010 18:15
Экспорт из DatsSet в Excel с использованием позднего связывания AnnNet Общие вопросы .NET 1 05.06.2009 14:58
отсутствие MFC 71U.DLL veresk Софт 1 05.02.2009 01:05