Да, спасибо.
Я уже так делал.
function GetEngines: PStrList;stdcall
Я это понял, когда ты написал в другом посте:
MyStrList:=NewStrList,
где MyStrList имеет тип PStrList.
где 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, все десять компонент разделяют один ресурс таблицы кодов. И даже с одним компонентом, тоже оправдано.
Для того, чтобы сделать полноценную схему, надо применить несколько таких элементов с разными модами.
В случае присутствия таблицы кодов в каждом элементе получится слишком расточительно.