Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Вниз

Создание копии объекта, созданного в приложении, в DLL.   Найти похожие ветки 

 
АлексейК   (2003-06-02 13:23) [0]

Хотелось бы услышать мнения по этому поводу. Как создать в DLL копию обеткта существующего в приложении.


 
Palladin   (2003-06-02 13:25) [1]

это как? зачем тебе копия?


 
АлексейК   (2003-06-02 14:44) [2]

Допустим в приложении есть объект Edit.
В DLL создаю
DllEdit:=Tedit.Create(....);
Теперь нужно что бы свойтва DllEdit"a послностью совпадали с Edit"oм приложения. Оговорюсь сразу, объект класса TEdit взят лишь в качетсве примера.


 
Skier   (2003-06-02 14:46) [3]

>АлексейК (02.06.03 14:44)
Объект умеет копировать (и читать) себя в(из) поток(а) (TStream)


 
Palladin   (2003-06-02 14:47) [4]

А на второй вопрос не ответил...


 
Green   (2003-06-02 16:39) [5]

>>DllEdit:=Tedit.Create(....);
DllEdit.Assign(EXEedit);

DLLEdit должен иметь в предках класс TPersistent.
свойства DllEdit которые объявлены в published секции будут как у ExeEdit.


 
Skier   (2003-06-02 16:41) [6]

>Green (02.06.03 16:39)
Сам пробовал ?


 
jack128   (2003-06-02 17:17) [7]


> Сам пробовал ?

При компиляции с ран тайм пакетами должно работать...


 
Skier   (2003-06-02 17:20) [8]

>jack128 © (02.06.03 17:17)
А разве про run-time пакеты что-нибудь было сказано ?


 
АлексейК   (2003-06-03 04:57) [9]

Да вот с потоками надо попробовать.


 
Green   (2003-06-03 10:35) [10]

>Green (02.06.03 16:39)
Да уж, ошибочка вышла :).

Можно так.
в exe для нужного компонента сохранить его свойства в строке:
S:=TMemoryStream.Create;
S.WriteComponent(Edit1);
StrStream := TStringStream.Create(st);
S.Seek(0, soFromBeginning);
ObjectBinaryToText(S, StrStream);
st:=StrStream.DataString;
StrStream.Free;
S.Free;

передать строку параметров в dll, а там
S:=TMemoryStream.Create;
StrStream := TStringStream.Create(st);
ObjectTextToBinary(StrStream, S);
StrStream.Free;
S.Seek(0, soFromBeginning);
C:=S.ReadComponent(nil);
(C as TEdit).Parent:=DLLForm;
(C as TEdit).Top:=10;
где C это твой новый компонент.

Не забудь добавить в Dll
initialization
RegisterClasses([TEdit]);

Но так обработчики событий не передаются.


 
Green   (2003-06-03 10:38) [11]

initialization
RegisterClasses([TEdit]);

будет работать только для bpl, для dll ты должен явно вызывать функцию dll которая будет делать RegisterClasses([TEdit]);


 
Green   (2003-06-03 11:19) [12]

А все обработчики событий можно загрузить
var PropList: PPropList;
NumProps: Integer;

InC - компонент из exe
...
GetMem(PropList, SizeOf(PPropInfo) * GetTypeData(InC.ClassInfo).PropCount);
NumProps := GetPropList(InC.ClassInfo, [tkMethod], PropList);
for i := 0 to NumProps - 1 do
SetMethodPropertyIfExists(C, PropList[i]^.Name, GetMethodProp(InC, PropList[i]^.Name));
...
end;

procedure SetMethodPropertyIfExists(AComp: TComponent; APropName: String;
AMethod: TMethod);
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(AComp.ClassInfo, APropName);
if PropInfo <> nil then
begin
if PropInfo^.PropType^.Kind = tkMethod then
SetMethodProp(AComp, PropInfo, AMethod);
end;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
14-50448
Ihor Osov'yak
2003-05-29 13:07
2003.06.16
РОССИЯНИН ШЕВЧЕНКО ПРИНЕС


9-50189
Кен
2003-01-10 03:07
2003.06.16
Где взять hlp-файл по Fastlib ? Сайт gfody.com не грузится. Может


14-50464
Style
2003-05-28 08:13
2003.06.16
Тут мою музыку на студии обработали :)


1-50369
NeshBriges
2003-06-04 01:11
2003.06.16
Загрузка в RichEdit


14-50525
Intell
2003-05-30 20:15
2003.06.16
Знает кто-нибудь где найти мелодию из WinXP?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский