Вверх ↑
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
#1: 2015-11-13 02:31:54 ЛС | профиль | цитата
Объясните плз, почему так глючит UseHiDll, проблема в нем или я что-то не так делаю??

Схема: code_36512.txt (4 компонента!)
Схема DLL: code_36513.txt (1 компонент)

Первый раз срабатывает, на второй Runtime Error
карма: 0

0
файлы: 2code_36512.txt [399B] [328], code_36513.txt [308B] [355]
Ответов: 8926
Рейтинг: 823
#2: 2015-11-13 10:29:30 ЛС | профиль | цитата
Gunnman, если бы я использовал HiDll, то именовал точки входа/выхода смысловыми ИМЕНАМИ, например TextIn или OutText, но никогда не применил цифры в качестве имени
карма: 19

0
Ответов: 655
Рейтинг: 18
#3: 2015-11-13 11:01:15 ЛС | профиль | цитата
Леонид, я уже все перепробовал, глючит его как точки не называй...
карма: 0

0
Ответов: 8926
Рейтинг: 823
#4: 2015-11-13 12:02:33 ЛС | профиль | цитата
Леонид писал(а):
..если бы я использовал HiDll..
То дал бы вам исчерпывающий ответ, а так первое, что бросилось в глаза
карма: 19

0
Ответов: 4630
Рейтинг: 749
#5: 2015-11-13 12:52:05 ЛС | профиль | цитата
Вообще-то, для возможности передачи строк между DLL и программой нужны дополнительные телодвижения в плане создания общего менеджера памяти. Это кто-то предусмотрел в hiDLL.pas и в make_dll?
карма: 26

0
Ответов: 824
Рейтинг: 138
#6: 2015-11-13 13:26:42 ЛС | профиль | цитата
Appcode_36514.txt
Dll code_36515.txt
карма: 1

3
файлы: 2code_36514.txt [589B] [257], code_36515.txt [437B] [227]
Голосовали:Tad, Gunnman, kaban4ik
Ответов: 655
Рейтинг: 18
#7: 2015-11-13 13:30:07 ЛС | профиль | цитата
А кто разработчик компонента? Может он доработает компонент?
Рано или поздно вопрос по работе с строками в DLL опять всплывет. Да и делать описание к компоненту "Только не работайте со строками" не логично

------------ Дoбавленo в 13.30:
sashaoli, неее ну так не честно п.с. спасибо!!
карма: 0

0
Ответов: 4630
Рейтинг: 749
#8: 2015-11-13 13:58:11 ЛС | профиль | цитата
Можно перед инициализацией DLL передавать в неё свой Memory Manager:
В THIUseHiDLL.SetName

#pas
var
MM: TMemoryManager;
Proc: procedure (const MemMgr: TMemoryManager);
begin
.....
Proc = GetProcAddress(FID,'SetShareMemoryManager');
GetMemoryManager(MM);
Proc(MM);
.....

В make_dll.dpr сформировать следующий код для сгенерированного проекта DLL:

#pas

var
OldMM: TMemoryManager

.....

procedure SetShareMemoryManager(const MemMgr: TMemoryManager);
begin
GetMemoryManager(OldMM); // Сохранить менеджер DLL
SetMemoryManager(MemMgr); // Задать менеджер, переданный из exe-шника
end;

.....

exports
...
SetShareMemoryManager;

.....

finalization
SetMemoryManager(OldMM); // Вернуть старый менеджер
// Возможно лучше делать не здесь, а в DLLProc при выгрузке DLL
end.

Либо из exe-шника передать функцию, конструирующую копию строки. DLL будет вызывать эту функцию при выдаче строк "наружу".
карма: 26

0
Ответов: 16884
Рейтинг: 1239
#9: 2015-11-13 14:01:23 ЛС | профиль | цитата
Мимо шёл...
Gunnman писал(а):
спасибо!!
Твоё "спасибо" в карман не положишь. Посмотри выше, как принято говорить "спасибо"
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#10: 2015-11-13 15:12:10 ЛС | профиль | цитата
Так я вроде плюсовал О_о, не засчиталось! Сейчас плюсанул, засчиталось..
------------ Дoбавленo в 15.12:
Netspirit писал(а):
Можно перед инициализацией DLL передавать в неё свой Memory Manager:
В THIUseHiDLL.SetName
плюсануть не могу)лимит уже исчерпан, попробую и отпишусь! Тебе тоже большое спасибо!
карма: 0

0
Ответов: 8926
Рейтинг: 823
#11: 2015-11-13 15:25:24 ЛС | профиль | цитата
Tad писал(а):
..Твоё "спасибо" в карман..
Ну ведь выкладывал уже универсальное http://forum.hiasm.net//getfile/35757, берите, не жалко
карма: 19

0
Ответов: 1841
Рейтинг: 369
#12: 2015-11-13 20:14:15 ЛС | профиль | цитата
[offtop]
Ох, помню разбирал этот элемент буквально по каждой букве, когда подключал пакет к плюсам...
Запутанный он, жуть просто.
Так и не смог перевести его в полной мере на плюсы, слишком много Delphi магии тут присутствует
Ещё и разные колбеки на публичные методы вложенного класса, которые вызываются для взаимодействия с приватными методами этого же вложенного класса...
[/offtop]
карма: 1
0
Ответов: 655
Рейтинг: 18
#13: 2015-11-14 23:47:36 ЛС | профиль | цитата
Netspirit, подскажите пожалуйста куда поместить указанный вами код в make_dll.dpr ? С THIUseHiDLL.SetName вроде разобрался.
карма: 0

0
Ответов: 4630
Рейтинг: 749
#14: 2015-11-16 11:17:12 ЛС | профиль | цитата
ElementsDelphimake. Потом выполнить make.bat там же. Я не ручаюсь за работоспособность приведенного мной кода. Я высказал только суть решения. Применяй это только если ты достаточно знаешь Delphi и понимаешь принцип предложенного решения, чтобы реализовать его самостоятельно.
карма: 26

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)