Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключение при попытке создать объект из dll 
:(
    Опции темы
Shaman2008
Дата 13.11.2018, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 21.6.2008

Репутация: нет
Всего: нет



Добрый вечер, уважаемые форумчане!
Я только набираюсь опыта, поэтому, прошу сильно меня не пинать.

Есть необходимость написать приложение, поддерживающее "модули". Все было хорошо первые "три шага", так сказать.

Я никогда не писал ПО подобного плана, поэтому, думаю, что у меня с кодом все плохо, но надо с чего-то начинать...

В общем, в VS я создал решение.
В решении присутствует 3 проекта.

1 проект  - сама программа, которая имеет интерфейс и свои рабочие классы.
2 проект - библиотека классов (dll). В ней я начал описывать базовые классы и интерфейсы для будущих модулей. Эту библиотеку я подключаю как ссылку к основной программе в 1 проекте и как ссылку в 3 проекте.
3 проект - dll с модулями внутри (под модулем, в данном случае, понимается каждый отдельный класс со своей реализацией).

В проекте 2 описан базовый класс, который наследуют классы в модулях:
Код

 public class BaseModule
    {
        ...
    }

interface ISimModule
    {
        ...
    }

public abstract class SimModule : BaseModule, ISimModule
    {
        ...
    }


В проекте 3 я его наследую:
Код

using LockheedMartin.Prepar3D.SimConnect; // сторонняя библиотека, которая необходима для реализации данного конкретного модуля
...

public class P3Dv4 : SimModule
    {
        ...
        private SimConnect _simconnect = null; // стоит добавить эту строчку, как я начинаю ловить Exception в программе на этапе получения экземпляра данного класса....

        public P3Dv4()
        {
            ...
        }
        ...
    }


Загрузка dll с модулями в основной программе происходит следующим образом:
Код

tmpAsm = Assembly.LoadFile(fsModule); // пытаемся загрузить файл dll в память
moduleUnitsNames = tmpAsm.GetExportedTypes(); // пытаемся получить массив типов(модулей), которые есть в сборке
foreach (Type t in moduleUnitsNames) // для каждого типа(модуля) в массиве делаем следующее
{
  try
  {
    BaseModule bm = (BaseModule)tmpAsm.CreateInstance(t.FullName); //  пытаемся получить экземпляр объекта базового типа и
    uint testSignature = bm.Signature; // пытаемся получить сигнатуру данного экземпляра
    ..........
    ..........
  }
  catch (Exception e)  // при ошибке во время попытки получить базовый экземпляр модуля или вызвать один из его методов
  {
     // ловим Exception "Адресат вызова создал исключение." если объявить приватную переменную с классом из сторонней dll (private SimConnect _simconnect = null;) 
  }
}

Если стороннюю библиотеку (LockheedMartin.Prepar3D.SimConnect) использовать "внутри программы", а не "внутри отдельного модуля", то проблем нет, объект создается (SimConnect) и успешно выполняет свои функции...

Подскажите, пожалуйста, в чем может быть проблема? Куда копать?
Спасибо заранее!!!
PM MAIL   Вверх
Shaman2008
Дата 14.11.2018, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 21.6.2008

Репутация: нет
Всего: нет



Удалось вытащить сообщение исключения:
"Не удалось загрузить файл или сборку \"LockheedMartin.Prepar3D.SimConnect, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null\" либо одну из их зависимостей. Не удается найти указанный файл."

Данная библиотека лежит в корне с программой. Почему он ее не видит? Может необходимо в ручную ее загрузить как-то в основную программу?
Похоже, надо разбираться с таким понятием как AppDomain... Если кто в курсе, подскажите пожалуйста.

Заранее спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1008 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.