Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Адрес метода / 9 сообщений из 9, страница 1 из 1
25.10.2004, 10:28
    #32752221
luser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
Привет.
Подскажите, можно ли получить адрес метода COM компоненты по его имени , а потом выполнить зная адрес ?
...
Рейтинг: 0 / 0
25.10.2004, 10:54
    #32752293
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
Бррр ...
я ничего не понял :)


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
25.10.2004, 13:52
    #32752785
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
JibSkeartя ничего не понял :)
GetProcAddress для COM :)
...
Рейтинг: 0 / 0
25.10.2004, 14:17
    #32752866
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
А ну да :)
ну это будет выглядить таким образом уже .
насколько я помню , если не прав поправьте ..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
typedef Boolean (_stdcall *LPCreateObject)(...);
...

hDLL = LoadLibrary("MyDLL");
LPCreateObject CreateObject;
if (hDLL != NULL)
{
   
   CreateObject = (LPCreateObject)GetProcAddress(hDLL,"CreateObject");
   ...  
}



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
25.10.2004, 23:03
    #32753872
luser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
Спасибо за ответы, но думаю что это не то.
Ситуация: есть СOM - сервер EXE написанный на VFP(вообще-то может быть написан на чем угодно). Я имею его библиотеку типов, это так , для заметки.
Использую его так:
#import "comdllex.tlb" rename_namespace("MVFPLib")
Явно объект не создаю, получаю PTR посредством приведения типа - это тож не важно.

IDispatch* _vfpptr = (IDispatch*)p(0).ev_long ;
ItestPtr m_myclass = (MVFPLib::ItestPtr)_vfpptr;

Привел указатель переданный из фокса в формате long к формату указателя.
Вот тут самое интрерсное:
Допустим я имею 3 метода:

m_myclass -> m1();
m_myclass -> m2();
m_myclass -> m3();

Есть функция, которая мне дает имя метода в символьной форме , допустим "m1", ясное дело именно этого объекта. Вот как мне по символьному имени получить адрес функции а потом ее деренуть ?
...
Рейтинг: 0 / 0
26.10.2004, 07:25
    #32753952
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
f() - это функция
f - указатель на функцию
;)
...
Рейтинг: 0 / 0
26.10.2004, 12:57
    #32754678
luser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
То Sie: А пример можно , улыбчивый вы наш ? :)) Конкретно по теме - получение адреса метода по его символьному имени и его выполнение ?
...
Рейтинг: 0 / 0
27.10.2004, 11:01
    #32756382
Sie
Sie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
хм... а это чем не пример был?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void f1(){};
void f2(){};

s()
{
void (*f)();
f = f1;
f();
f = f2;
f();
}
...
Рейтинг: 0 / 0
27.10.2004, 21:03
    #32758067
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Адрес метода
примерно так :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
WideString s1, s2, s3, s4;
void __fastcall TForm2::Button2Click(TObject *Sender)
{
    if( fReport == NULL )
        fReport = new TfReport(NULL);

    fReport->Show();

  //wReport1.wGetDesigner.Report.Sections("Detail").Controls.Add("DDActiveReports2.XMLDataControl")
  s1 = "Detail";
  s2 = "DDActiveReports2.XMLDataControl";
  Variant designer = fReport->wReport->wGetDesigner();
  PropertyGet Report("Report");
  Variant designer_report = designer.Exec(Report);
  Function Sections("Sections");
  Variant report_sections = designer_report.Exec(Sections);
  Function Item("Item");
  Item << s1.Detach();
  Variant report_section = report_sections.Exec(Item);
  PropertyGet Controls("Controls");
  Variant report_section_controls = report_section.Exec(Controls);
  Function Add("Add");
  Add << s2.Detach();
  Variant xml_control_object = report_section_controls.Exec(Add);
  PropertySet RecordsetPattern("RecordsetPattern");
  s3 = "//ROWDATA/ROW";
  RecordsetPattern << s3.Detach();
  //xml_control_object.Exec(RecordsetPattern);
  PropertySet FileURL("FileURL");
  s4 = "file://s:\\My\\Soft\\ra\\tst.xml";
  FileURL << s4.Detach();
  xml_control_object.Exec(FileURL);
  xml_control_object.Exec(RecordsetPattern);
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Адрес метода / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]