Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Опять проблемы с ДЛЛ


Автор: Fedor 6.11.2003, 09:23
Исправил множество мелких и крупных глюков в подключенном мной ДЛЛ. Откомпилировал, и УРА!!! Ошибок нет... Но когда я запустил..... Выдается месага, что программа (моя) выполнила недопустимую операцию и будет закрытаsad.gif. Попробовыл продебагить... Так вот: ошибка выдается сразу после формкреэйта, где я впервые использую одну из функций из ДЛЛ
Хелп плиз кто чем могет

Автор: Fedor 6.11.2003, 09:30
Кстати, и еще... Можно ли в ДЛЛ использовать глобальные переменные и как они будут работать.
Например: я, вызвав одну из функций ДЛЛ, задал значение глобальной переменной. после этого через некоторое время я вызвал другую функцию, которой требуются эти значения. Будут ли они сохранятся? Если нет, то как это можно обойти?

Автор: Pakshin A. S. 6.11.2003, 10:27
1) Проверь всю загрузку DLL и вызов её процедур;
2) Создай отдельный модуль в приложении; засунь туда все процедуры из DLL; отмени загрузку DLL и посмотри, что получится.

Таким образом я иногда нахожу ошибки в процедурках DLL.

Про переменную: Лучше храни её в приложении, т. е. запихни туда результат выполнения некой операции, а через некоторое время запусти операцию, передав ей в качестве параметра сохранённый результат.

Автор: stab 6.11.2003, 23:45
можно отлаживать одновременно и DLL и программу её использующую: Run -> Pararmeters -> Host Application, может это спасет отца русской демократииииии smile.gif

Автор: Fedor 7.11.2003, 09:00
Цитата
Про переменную: Лучше храни её в приложении, т. е. запихни туда результат выполнения некой операции, а через некоторое время запусти операцию, передав ей в качестве параметра сохранённый результат.

Лучше конечно было бы хранить ее так, чтобы приложение "не знало" о ней... Вернее даже обязательно, чтобы эти переменные не зависили от конкретной ДЛЛ. Ведь если в приложение запихнуть переменные, то я не смогу использовать разные ДЛЛ на этом месте...
Наверное никто ничего не понял из того что я сказал... smile.gif

Автор: Fedor 7.11.2003, 09:04
Кстати, еще вопрос... Можно ли подключать разные ДЛЛ в зависимости от некоторых параметров. Во всех ДЛЛ имена соответствующих функций одинаковы. Нпример, если мы выбрали в списке первый пункт, в юните используется 1.dll иначе - 2.dll

Автор: Akella 7.11.2003, 09:18
Цитата
Кстати, еще вопрос... Можно ли подключать разные ДЛЛ в зависимости от некоторых параметров. Во всех ДЛЛ имена соответствующих функций одинаковы. Нпример, если мы выбрали в списке первый пункт, в юните используется 1.dll иначе - 2.dll


Конечно можно...

Автор: Fedor 7.11.2003, 09:33
Цитата
Конечно можно...

smile.gif
Хорошо... Переформулирую вопрос: КАКconfused.gif

Автор: Fedor 8.11.2003, 00:50
Неужели никто неможет помочь? sad.gif

Автор: stab 8.11.2003, 03:20
Я так думаю, что тут не обойтись без LoadLibrary+GetProcAddress. Схема такая: есть модуль, скажем MyGenericDLL, следующей структуры:

Код

unit MyGenericDLL;

interface

uses windows;

type
TMyProc1 = procedure(p1: Integer);

var
MyProc1: TMyProc1;

procedure InitMyDLL(path: String);
procedure DeinitMyDLL;

implementation

var
hDLL: Integer;

procedure InitMyDLL(path: String);
begin
hDLL := LoadLibrary(PChar(path));
MyProc1 := GetProcAddress(hDLL, 'MyProc1');
end;

procedure DeinitMyDLL;
begin
FreeLibrary(hDLL);
end;

end.



код примерный, я даже не надеюсь, что он скомпиляется smile.gif
использовать, так:

Код

uses MyGenericDLL;
...
InitMyDLL('mydll.dll');
...
MyProc1(101);
...
DeinitMyDLL;
...
InitMyDLL('mydll2.dll');
...
MyProc1(101);
...
DeinitMyDLL;

Автор: Akella 10.11.2003, 11:18
Используй динамический метод загрузки DLL.
что-то вроде этого (попозже посмотрю более конкретно)

...
a: procedure (a: integer, b:string);
...
implementation
...

if c=25 then
LoadLibrary('my.dll')
else
LoadLibrary('notmy.dll');

@a := GerProcAdres('my')

//дальше работаем с процедурой

Автор: stab 10.11.2003, 11:47
Цитата(dsergey @ 10.11.2003, 08:18)
(попозже посмотрю более конкретно)

достаточно посмотреть выше на один пост smile.gif

Автор: Akella 11.11.2003, 10:18
To cully
Цитата
InitMyDLL

Я такого пока не встречал, обязательно попробую.
Или это ты написал чисто условно smile.gif

Автор: stab 11.11.2003, 15:51
условно, конечно smile.gif все это надо самому реализовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)