Так вот, проблема уже на первом и простейшем шаге. В dll есть функция:
- Код: Выделить всё
Procedure FormSizeWidth(var f:TForm); stdcall; export;
var
i:integer;
Begin
f.Width:=f.Width + 50;
for i := 0 to f.ComponentCount - 1 do
begin
if (f.Components[i].Name = 'btnTest') then
begin
(f.Components[i] as TButton).Caption := 'Привет из Dll!';
//f.Components[i].Name := 'NameFromDll';
end;
end;
End;
Здесь я просто пробовал что-нибудь изменить в переданной форме: изменить надпись на определенной кнопке и изменить ширину формы. В итоге:
ширина формы меняется, но вот эта строчка:
- Код: Выделить всё
(f.Components[i] as TButton).Caption := 'Привет из Dll!';
вызывает ошибку Invalid type cast. Press OK to ignore and risk data corruption.
При этом в самом приложении аналогичный код работает без проблем.
Если указанную строку закомментировать и расскоментировать эту:
- Код: Выделить всё
f.Components[i].Name := 'NameFromDll';
то никаких ошибок нет, и имя компонента реально меняется! Что это значит и как это преодолеть?