Главная страница
    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.47 MB
Время: 0.017 c
2-1255541991
user1991
2009-10-14 21:39
2009.11.29
try .. finally .. end. Помогите разобраться


15-1254455614
RDen
2009-10-02 07:53
2009.11.29
Закрываете обсуждение, дак хоть причину в двух словах указывайте


15-1249503149
TIF
2009-08-06 00:12
2009.11.29
PHP на хостинге с FreeBSD: глюки или чиь-то кривые руки?


15-1254234150
Частный инвестор
2009-09-29 18:22
2009.11.29
Идеи для бизнеса


2-1255364278
33Rus
2009-10-12 20:17
2009.11.29
Проблема с DeviceIoControl





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