Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 13:54   #1
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию Dll'ки

В общем народ помогите. У меня есть приложение, которое запускает специально предназначенные для неё библиотеки в нужный момент времени (Dll1). А есть которые запускаются на все время, где храняться динамические данные. (Dll2)
Как я делаю. У меня есть список функций. Я загружаю (Dll2) и беру от туда адреса функций для чтения и записи данных. Затем загружаю Dll1 и вызываю в ней процедуру запуска и передаю в неё список функций из Dll2. Проблема в том, что при использовании функций из Dll2 в Dll1 происходит ошибка. И потом Dll2 полностью отказывается работать. Может подскажите какие могли быть проблемы? Делаю примерно так
Код:
{Dll2}
function WriteData(cell: string; data: string): boolean;
begin
 //Записываем данные
end;
exports
 WriteData;

{Types}
type
 TDllFuncList = record
  WriteData: function(cell: string; data: string): boolean;
 end;

{Dll1}
var
 Functions: TDllFuncList;

function Execute(FList: TDllFuncList): boolean;
begin
 Functions:= FList;
 //...
 Functions.WriteData('uname','name');
 //...
end; 

exports
 Execute;

{Application}
 //Load Dll2
 FDllHandle:= LoadLibrary('dll_2.dll');
 @FuncList.WriteData:= GetProcAddress(FDllHandle,'WriteData');
 if @FuncList.WriteData = nil then exit;
 //Load Dll1
 hmodule:= LoadLibrary('dll_1.dll');
 @execute:= GetProcAddress(hmodule,'Execute');
 Execute(FuncList)
 ...
alexprey вне форума Ответить с цитированием
Старый 20.04.2011, 15:21   #2
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Версия делфи, менеджер памяти?
eduard93 вне форума Ответить с цитированием
Старый 20.04.2011, 15:45   #3
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Delphi 7
Цитата:
менеджер памяти?
Что это?
alexprey вне форума Ответить с цитированием
Старый 20.04.2011, 15:52   #4
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

http://www.gunsmoker.ru/2009/01/blog-post.html
eduard93 вне форума Ответить с цитированием
Старый 20.04.2011, 16:05   #5
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Так понятно. Не понял только одной вещи. ShareMem объявлять в каждом юните или можно, только в основном?
alexprey вне форума Ответить с цитированием
Старый 20.04.2011, 16:15   #6
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

eduard93 спасибо огромное. Прямо раскрыл мне глаза. А я думаю, че выскакивает Invalid Pointer Operation. Еще раз спасибо.
alexprey вне форума Ответить с цитированием
Старый 20.04.2011, 16:47   #7
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Цитата:
Сообщение от alexprey Посмотреть сообщение
ShareMem объявлять в каждом юните или можно, только в основном?
В основном (Project -> View source), причем первым в списке uses.
eduard93 вне форума Ответить с цитированием
Старый 20.04.2011, 20:14   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Прямо раскрыл мне глаза
Угу.
Нет пророков в своём отечестве.
Борланд писала для Пушкина огромный важнющий комментарий в заготовке dll-проекта, создаваемого при File - New - Other.. - DLL Wizard.
А мы не пушкины - значит читать эту "хрень" нам нафихъ не надо.
mss вне форума Ответить с цитированием
Старый 20.04.2011, 20:26   #9
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Чтобы его прочесть, нужно знать английский. Но не всем везет с учителями. Хотя конечно незнание иглиша - недостаток, с которым нужно боротся.
eduard93 вне форума Ответить с цитированием
Старый 20.04.2011, 20:46   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Чтобы его прочесть, нужно знать английский
А это личная половая драма того кто его не знает и знать не желает.

И почему бы честно не сказать "моя программа не работает, предполагаю из-за того что там был важный комментарий на аглицком, в котором я дуб дубом, но который, полагаю, весьма важен для решенеия задачи - помогите перевести, я заплачУ за ваши знания и ваш труд" ?

))
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц