Страница 1 из 1

Инициализация DLL.

Добавлено: 17 Июнь 2013, 10:03
kreator
Есть приложение с несколькими dll. Но при запуске exe'шника не происходит вызов методов класса инициализации dll. Всё бы ничего (и без них работает), вот только оказалось, что шаблоны закидывают в эти методы некий нужный код (в частности, чтение и запись ini-файла. Вопрос такой - нужно ручками прописывать эту инициализацию или где-то можно указать, чтобы это происходило?

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 12:15
samo_let
А как именно к АРР ехе-шника подключаются DLL?

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 12:37
kreator
В Аpp exe-шника есть только основной фрейм. А все процедуры описаны как External со ссылкой на соответствующую либу.

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 12:47
samo_let
Я имел ввиду про подключение (на примере cw5-cw6):
1 вариант: Application - Insert Module - External Lib -
2 вариант: Project - Library, object.. - Add File... -
?

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 13:25
kreator
1 вариант. По-моему это не важно. Вот приложение, которое превращается в dll, генерит код для инициализации других dll. А основное не генерит.

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 14:29
samo_let
Что то я не понял
Вот штатный код при варианте 1 в exe, сгенеренный шаблонами:

Код: Выделить всё

  CODE
  GlobalErrors.Init
  INIMgr.Init('posob.INI')
  if exists('POSOB.HLP') then HELP('POSOB.HLP') end
  SystemParametersInfo (38, 0, lCurrentFDSetting, 0)
  IF lCurrentFDSetting = 1
    SystemParametersInfo (37, 0, lAdjFDSetting, 3)
  END
  w24_0:Init(GlobalErrors, INIMgr)                    ! Initialise dll (ABC)
  w24_1:Init(GlobalErrors, INIMgr)                    ! Initialise dll (ABC)
  w24_2:Init(GlobalErrors, INIMgr)                    ! Initialise dll (ABC)
  w24_3:Init(GlobalErrors, INIMgr)                    ! Initialise dll (ABC)
  Main
  INIMgr.Update
  w24_0:Kill()
  w24_1:Kill()
  w24_2:Kill()
  w24_3:Kill()
  IF lCurrentFDSetting = 1
    SystemParametersInfo (37, 1, lAdjFDSetting, 3)
  END
  INIMgr.Kill
  GlobalErrors.Kill
Этого нет ?

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 17:10
kreator
Вот то-то и оно. Код сгенерированный С8.9759:

Код: Выделить всё

  CODE
  GlobalErrors.Init(GlobalErrorStatus)
  FuzzyMatcher.Init                                        ! Initilaize the browse 'fuzzy matcher'
  FuzzyMatcher.SetOption(MatchOption:NoCase, 1)            ! Configure case matching
  FuzzyMatcher.SetOption(MatchOption:WordOnly, 0)          ! Configure 'word only' matching
  INIMgr.Init('.\Manager.INI', NVD_INI)                    ! Configure INIManager to use INI file
  DctInit
  SYSTEM{PROP:Icon} = 'pics\1App.ico'
  MainFrame
  INIMgr.Update
  INIMgr.Kill                                              ! Destroy INI manager
  FuzzyMatcher.Kill                                        ! Destroy fuzzy matcher

Я и думаю, может где-то надо явно указать, чтобы генерил инициализацию dll.

Re: Инициализация DLL.

Добавлено: 17 Июнь 2013, 23:51
Yufil
В CW6 это Global Properties -> External Module Options -> Standard Clarion Lib/Dll -> On

Re: Инициализация DLL.

Добавлено: 18 Июнь 2013, 9:59
kreator
Оказывается, на нужную генерацию влияет галка "Generate Template global data and ABC's as EXTERNAL". Во как! Спасибо всем.