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

Вниз

Вызов Tform из dll   Найти похожие ветки 

 
LOS_A   (2005-08-16 10:19) [0]

Я заранее прошу прощение за вопрос, потому что чтото подобное уже обсуждалось, но меня этот вопрос интерисует критически.
Есть DLL c добавленной формой, как из другого приложения ее запустить.(прочитал что нужно использовать Reflection)

Пытаюсь так:

procedure InvokeType(aNameSpace: String);
 var
   obj: System.Object;
   t: System.Type;
   Met : MethodInfo;
 begin
   t := Ass.GetType(aNameSpace+".TForm1");
   //Met := t.GetMethod("Form1.ShowModal");
   obj := Activator.CreateInstanceFrom());
   //Met.Invoke(obj,nil);
   t.InvokeMember("Form1.ShowModal", BFlag or BindingFlags.InvokeMethod, nil, obj, nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  BFlag := BindingFlags.DeclaredOnly or BindingFlags.Public or
   BindingFlags.Instance or BindingFlags.InvokeMethod or BindingFlags.NonPublic;
   Ass := Assembly.LoadFrom("C:\Delphi\1\Library1.dll");
   InvokeType("Unit1");
end;


Но активатор выводит ошибку(чтото с парамерами конструктора помоему)


 
Игорь Шевченко ©   (2005-08-16 11:23) [1]


> Но активатор выводит ошибку


Судя по отсутствию ее текста - секретную.


 
LOS_A   (2005-08-16 11:34) [2]

Прошу прощение на самом деле команда такая
obj := Activator.CreateInstance(t);
а ошибка "NO parameterless constructor defined for this object.


 
Игорь Шевченко ©   (2005-08-16 11:36) [3]


> а ошибка "NO parameterless constructor defined for this
> object.


Ну да, конструктор формы имеет параметр Owner - все верно. Я бы сделал метод без параметров, создающий форму и вызывал бы его.


 
LOS_A   (2005-08-16 11:41) [4]

А пример можно? Пожалуйсто!


 
DiamondShark ©   (2005-08-16 12:33) [5]

Конструктор с параметрами (хм... это VCL-ный изврат? System.Windows.Forms.Form без параметров).
Activator имеет перегруженную версию CreateInctance для вызова конструктора с параметрами.
MSDN -- рулез.


 
LOS_A   (2005-08-16 13:06) [6]

А какой Параметр передать надо? Я еще пробывал так:
obj := t.InvokeMember(".ctor",BindingFlags.CreateInstance,nil,nil,[???]);


 
DiamondShark ©   (2005-08-16 14:28) [7]


> А какой Параметр передать надо?

Такой, какой требуется конструктору класса. Посмотреть, какие параметры принимает конструктор можно в описании класса.


 
LOS_A   (2005-08-16 15:01) [8]

Все разобрался
procedure InvokeType(aNameSpace: String);
 var
   f : TForm;
   obj : System.Object;
   t: System.Type;
 begin
   t := Ass.GetType(aNameSpace+".TForm1");
   f := TForm (t.InvokeMember(".ctor",BindingFlags.CreateInstance,nil,nil,[Application]));
   f.Show;

end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  BFlag := BindingFlags.DeclaredOnly or BindingFlags.Public or
   BindingFlags.Instance or BindingFlags.InvokeMethod or BindingFlags.NonPublic;
   Ass := Assembly.LoadFrom("C:\Delphi\1\Library1.dll");
   InvokeType("Unit1");
end;


Большое всем спосибо!


 
LOS_A   (2005-08-16 16:31) [9]

Разобрались с одним появилось другое. Вызываю InvokeMember, чтобы установить поле.
t.InvokeMember ("SEND",BFlag or BindingFlags.SetField, nil, f ,["XXX"]);

вылазит ошибка "Cannot specify Set on a Field and Invoke on a methed. Parametr name: InvokeAttr.

В EXE определенно так

Public
SEND : string;


 
DiamondShark ©   (2005-08-16 17:30) [10]

Значит какой-то лишний флаг.



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

Форум: ".Net";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
15-1254238851
Суслик_
2009-09-29 19:40
2009.11.29
Идея борьбы со спамом


15-1254169806
Юрий
2009-09-29 00:30
2009.11.29
С днем рождения ! 29 сентября 2009 вторник


15-1254141163
jack128_
2009-09-28 16:32
2009.11.29
Эксперт для работы с SVN ??


8-1190043138
<A~kiber}{ aka a.k.>
2007-09-17 19:32
2009.11.29
как сделать элемент управления неправильной формы


3-1213982498
312kbps
2008-06-20 21:21
2009.11.29
ADOCommand.Parameters.CreateParameter





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский