Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
Народ, я смотрю тут много вопросов по dll. Если что могу кинуть пример работающей библиотеки и кусок кода п приложении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 05:52 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
брось всем будет только на пользу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 15:42 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
Брось мне. Может чего новенького посмотрю. e-mail:grey_ufo@mail.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 20:14 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
// Вызов библиотеки - ДИНАМИЧЕСКОЙ Function TMDIChildBase.RunDLL(ConnDB : TConnDB; Params : TParamsA; ParamsDlg : TParamsToDlg): Boolean; var RunMDIChild : TRunMDIChild; //объявили переменную типа процедуры - можно локальную, пофиг CloseLib : TCloseLib; LibS,CurrentPath : String; Handle :THandle; Begin CurrentPath:=GetCurrentDir; LibS := Params.Lib+ParamsDlg.NameLib+'.dll'; If FileExists(LibS) Then Begin Handle := LoadLibrary(PChar(LibS)); // загрузили библиотеку, если ее еще нет if Handle <> 0 then // если все пучком... begin @RunMDIChild := GetProcAddress(Handle, 'RunMDIChild'); //получили адрес процедуры по ее имени if @RunMDIChild <> nil then Result := RunMDIChild(ConnDB, Params, ParamsDlg, Application); // ну и выполнили FreeLibrary(Handle); // а потом выгрузить библиотеку. Delphi за тебя это не сделает ! end; End Else ShowMessage(ErrNoFoundLib); Handle := 0; SetCurrentDir(CurrentPath); End; то что у меня в коде библиотеки var oldApp : TApplication; Function RunEdit (ConnDBt : TConnDB; ParamsT : TParamsA; ParamsDlgT : TParamsToDlg; App : TApplication):Boolean; begin Application := App; Result := RunWin(ConnDBt, ParamsT, ParamsDlgT); // обычная функция в которой в частности генениртся форма Application.ProcessMessages; // дали ей самоуничтожиться (если ее не было, то это не помешает) Application := oldApp; // восстановили среду приложения библиотеки. После этого уже можно выгружать end; exports RunEdit name 'RunMDIChild'; begin OldApp:=Application; // эта фишка обязательна для динамической выгрузки библиотеки. //т.е. нужно сохранить ссылку на родной Application библиотеки, чтобы ее потом можно было //динамически выгрузить. end. Параметры передаваемые в функции это ссылки на классы. Не получилось только передать ссылку на компнент TIBTransaction. Не заработало. Вобщем одно золотое правило. Если приложение выделило память, то ОНО ЖЕ и должно ее освободить. Соответственно так же и dll. Не получилось передать тип variant. Наверное из-за перераспределения памяти. Строки передаются, только в библиотеке лучше только считывать с них данные никак не модифицируя входной параметр. Вот вобщем и все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 08:09 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
Да, забыл... если в dll возник exception, то его следует обработать именно в библиотеке. В противном случае приложение обработав его попытается освободить память закрепленную за объектом TException и получим AV. По этой же причине в библиотеке вредна инструкция raise. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 08:12 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
Передавать строки нежелательно, а вот УКАЗАТЕЛЬ на строку - ради Бога. И тогда и читать можно, и писать в нее. Теперь про передачу компонента: Передавай прямо в лоб xxx(x: TIBTransaction). Все работать должно (это же адрес). Я так TOracleSession передаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 08:14 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
Оракловые компоненты может быть и работают. в IBX компонента TIBDatabase прекрасно работает, а эта отказывается... мне кажется это баг компоненты... для справки у меня Delphi5. А с указателями... нельзя перераспределять память. Если твоя строка вписывается в выделенный предел, то все Ok, если нет, то облом. MicroSoft рекомендует вообще юзать PChar. Кстате, у них частенько присутствует алгоритм, когда приложение выделяет память под PChar а библиотека туда пишет значение. В качестве примера функции работы с принтером, GetUserName и прочее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 12:16 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
Вы чего народ? Всё же работает - только надо использовать Sharemem. Подробности в справке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 16:49 |
|
||
|
По поводу dll
|
|||
|---|---|---|---|
|
#18+
и тянуть за собой лишнюю dll.... мне показалось это лишним, тем более что у нас по логике работы dll должна работать в выделенной транзакции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 03:15 |
|
||
|
|

start [/forum/topic.php?fid=58&tid=2118861]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 407ms |

| 0 / 0 |
