Страница 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". Во как! Спасибо всем.