На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Выполнить функцию при динамической загрузки библиотеки , C#
    Можно ли как-то выполнить функцию в момент загрузки библиотеки.

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

    ExpandedWrap disabled
      var assembly = Assembly.LoadFile(LibName);
      var mytype = assembly.GetType(MyTypeName, true, true);
      var myclass = Activator.CreateInstance(mytype);


    В плюсовой библиотеки есть "entry point" в которой можно сделать некоторое действие. Пошарился по msdn и ничего не нашел подобного для C#.
      Цитата ViktorXP @
      Можно ли как-то выполнить функцию в момент загрузки библиотеки.

      В плюсовой библиотеки есть "entry point" в которой можно сделать некоторое действие.

      Что подразумевается под "entry point" - DllMain ?
      Дело в том, что ещё до "DLL_PROCESS_ATTACH"
      вызываются конструкторы экземпляров классов, объявленных
      как глобальные переменные.
      Это значит, что у dll-ей (как и у exe-модулей) есть свой "startup".
      ---
      Значит, можно попробовать сделать это (если это вообще возможно в C#).
      (я C# не использовал, но для c++ это точно. Вообще именно так и должно быть у Виндуса.)
      ---
      Причём, конструктор такого экземпляра класса будет вызван до DLL_PROCESS_ATTACH,
      а деструктор - после DLL_PROCESS_DETACH.
      Сообщение отредактировано: ЫукпШ -
        Цитата ЫукпШ @
        Причём, конструктор такого экземпляра класса будет вызван до DLL_PROCESS_ATTACH,
        а деструктор - после DLL_PROCESS_DETACH.

        в том и печаль что в шарпе конструктор класса не срабатывает в библиотеке. да и в exe он не срабатывает если класс нигде не используется :no-sad:

        Добавлено
        Цитата ЫукпШ @
        как глобальные переменные.

        в c# нет глобальных переменных, в привычном поминании.
        есть классовые переменные. их можно рассматривать как глобальные, но они не инициализируются без инициализации самого класса ((
          Цитата ViktorXP @
          в c# нет глобальных переменных, в привычном поминании.
          есть классовые переменные.

          Можно ли объявить статический экземпляр класса,
          как переменную другого класса ?
          Сообщение отредактировано: ЫукпШ -
            Может быть эта ссылка как то поможет: https://stackoverflow.com/questions/8206736...ain-in-c-winapi
              Цитата ЫукпШ @
              Можно ли объявить статический экземпляр класса,
              как переменную другого класса ?

              можно. но если этот класс не будет использован то переменная не инициализируется ))

              Добавлено
              Цитата Wound @
              Может быть эта ссылка как то поможет: https://stackoverflow.com/questions/8206736...ain-in-c-winapi

              а вот это идея... пометить класс атрибутом и искать по атрибуту.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0290 ]   [ 16 queries used ]   [ Generated: 29.03.24, 11:56 GMT ]