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


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Адрес метода
    #32752785
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JibSkeartя ничего не понял :)
GetProcAddress для COM :)
...
Рейтинг: 0 / 0
Адрес метода
    #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
Адрес метода
    #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
Адрес метода
    #32753952
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
f() - это функция
f - указатель на функцию
;)
...
Рейтинг: 0 / 0
Адрес метода
    #32754678
luser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То Sie: А пример можно , улыбчивый вы наш ? :)) Конкретно по теме - получение адреса метода по его символьному имени и его выполнение ?
...
Рейтинг: 0 / 0
Адрес метода
    #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
Адрес метода
    #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
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Адрес метода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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