Вверх ↑
Ответов: 2059
Рейтинг: 132
#1: 2013-10-16 11:47:14 ЛС | профиль | цитата
Minkovsky
Да, спасибо.
Я уже так делал.
function GetEngines: PStrList;stdcall
Я это понял, когда ты написал в другом посте:
MyStrList:=NewStrList,
где MyStrList имеет тип PStrList.


Можно смело ожидать "бешеных указателей", если не использовать разделяемую память, вроде SharedMem.

Нет, как раз с указателями всё в порядке. Просто получается, что PStrList, образно говоря, это часть от TStrings.
Попробую сделать ассемблерную вставку(выделено жирным).
Ниже кусок сделанный не в Hiasm.
...
* Reference to control TForm1.ComboBox1 : TComboBox
|
00457DDC 8B8300030000 mov eax, [ebx+$0300] ; в eax GetEngines:TStrings;stdcall - тут всё в порядке.

* Reference to field TComboBox.Items : TStrings
|
00457DE2 8B803C020000 mov eax, [eax+$023C]
00457DE8 8B08 mov ecx, [eax]
* Reference to method TStrings.Add(string)
|
00457DEA FF5138 call dword ptr [ecx+$38]
00457DED 66FF45FA inc word ptr [ebp-$06]
00457DF1 66FFCE dec si
00457DF4 75D4 jnz 00457DCA
00457DF6 33D2 xor edx, edx
...
Но это локальное решение, а нужно глобальное.
Или, как предложил andrestudio.
Я тоже для себя так делал, с той лиш разницей, что брал SysUtils.pas и SysConst.pas из Дельфи 4 и клал их в директорию code.
В юните заменял KOL на SysUtils. А как быть пользователям? Тоже искать Дельфи 4 или sysclasses.7z?
Оказалось, что проблемы нет! Только сейчас дошло.
При установке компонента, все pas файлы автоматом перепишутя в директорию code.
Просто их надо положить рядом с юнитом компонента, как иконку.
Со временем и зтого не надо будет делать.

andrestudio
dll не есть гуд конечно,

Думаю, что не так.
В случае с dll, все десять компонент разделяют один ресурс таблицы кодов. И даже с одним компонентом, тоже оправдано.
Для того, чтобы сделать полноценную схему, надо применить несколько таких элементов с разными модами.
В случае присутствия таблицы кодов в каждом элементе получится слишком расточительно.

карма: 6

0