Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 19:36 13.07.25 
Клубове/ Компютри и Интернет / Програмисти Пълен преглед*
Информация за клуба
Тема Re: я като си зачекал темата [re: zaphod]
Автор void* (психопат)
Публикувано24.05.05 03:27  



браво, тва изглежда е много як проект, щом трябва да се правят такива клизми!

първото нещо, което ми дойде наум като прочетох описанието е това:

. swig е софтваре, което генерира врапери за C/C++ код, които да се ползват от скриптови езици като перл и питон. в крайна сметка се получава динамична библиотека, която скриптовите езици могат да заредят и ползват.

оттук идва и въпросът ти откъде точно изпълняваш код? щото спомена за длл-ки нещо. аз си представям обаче, че си имаш няква C++ програма, в която има много неща, класове, функции, едно друго... едно от тези неща сигурно функция от сорта на

void execute(const char *program);

program е интерпретираната програма и ти вероятно искаш в нея да можеш да кажеш

a = create_object_of_type(A);
a.invoke_native_method(func1, param1, param2);

или направо

a.func1(param1, param2);

тоест класовете, с които искаш да работиш са част от самия интерпретатор, но трябва да се виждат/ползват и от интерпретирания код.


аз лично не бих се опитвал обаче да ползвам директно класовете от програмата. за всеки клас A може да се напише

class A_extender : public A
{
public:
static A_extender* Create();
static A_extender* Create(int param);
static A_extender* Create(char * param);
static void Destroy(A_extender*);

static bool Invoke(A_extender* obj, const char *method, int argc, char **argv);

private:
// invoke the respective constructors of A, which may be many
A_extender();
A_extender(int param);
A_extender(char * param);
~A_extender();
}

ще регистрираш статичните функции за създаване/затриване, които са си обикновени указатели.

в случая адресите на оверлоаднати функции се взимат с клизма



за всяка ще се прави нещо подобно (в случай, че изобщо искаш да са с оверлоаднати функциите):

A_extender* (*pFunc)(int param) = A_extender::Create; // the 2-nd
int create_addr = reinterpret_cast<int>(pFunc);


ако можеш да жертваш малко скорост, си пишеш Invoke функция за всеки клас и градът спи. това е най-елементарното и безболезнено решение, според мен. а данните както и сега ще си ги регистрираш по отместване, там няма нищо особено.



а ако трябва да се викат директно функциите ще е по-сложно. това ще се мисли в друг пост евентуално.

като гледам, че указателят към член функция е 8 байта ме обзема силно подозрение, че първите 4 са указател към началото на функцията, а вторите са отместване от this на текущия обект (ако не се ползва множествено наследяване отместването е 0).

например имаме следната йерархия

class A
{
public:
int a_func() { return a_data; }
int a_data;
};

class B
{
public:
int b_func() { return b_data; }
int b_data;
};

class C : public A, public B
{
public:
int c_func() { return c_data; }
int c_data;
};

C c;

int (C::*pFunc2)() = &C::b_func; // inherited from B!
(c.*pFunc2)(); // call the function with the this pointer set to the B subobject (it's at some offset from &c)

pFunc2 = &C::c_func; // C's own
(c.*pFunc2)(); // call the function with the this pointer set to the C object (zero offset here)

виждаш, че не можеш да викаш директно функциите, като им даваш &c за първи параметър, защото не всички искат един и същи this. в случая само с единично наследяване началата на всички подобекти съвпадат и this е един и същи за всички.

ако викаш направо c.b_func() компилаторът си настройва this-а без въобще да разбереш, но като се ползват указатели към член необходимото отместване става ясно чак в runtime. затова не можеш да кастваш такива указатели както си искаш.

unsigned

Цялата тема
ТемаАвторПубликувано
* я пробвайте да компилирате това: zaphod   20.05.05 12:04
. * Я пак, че не разбрах нещо Colombino   20.05.05 13:11
. * Re: Я пак, че не разбрах нещо Pekoнcтpykтop   20.05.05 15:42
. * Не точно Colombino   20.05.05 16:01
. * Re: Не точно Dorian_Gray   20.05.05 16:49
. * Именно, де Colombino   20.05.05 17:00
. * "членове с деструктори"-ебааа!!! focusnik   20.05.05 17:27
. * Re: Я пак, че не разбрах нещо void*   20.05.05 17:15
. * Другари! BjarneStroustrup®   21.05.05 10:07
. * Re: Другари! Colombino   21.05.05 12:26
. * Re: Другари! BjarneStroustrup®   21.05.05 12:48
. * Re: Другари! Colombino   21.05.05 13:15
. * Re: Другари! void*   22.05.05 02:05
. * Тва на мен ли го казваш?!? Colombino   22.05.05 14:39
. * Re: Тва на мен ли го казваш?!? void*   22.05.05 20:07
. * Re: Тва на мен ли го казваш?!? BjarneStroustrup®   25.05.05 12:32
. * Не вярвам Colombino   25.05.05 15:45
. * Re: Не вярвам BjarneStroustrup®   25.05.05 16:35
. * Re: Тва на мен ли го казваш?!? void*   25.05.05 16:24
. * Re: Тва на мен ли го казваш?!? BjarneStroustrup®   25.05.05 16:37
. * Re: Другари! xyz   21.05.05 16:46
. * Re: Другари! Colombino   21.05.05 20:12
. * Re: Другари! zaphod   21.05.05 20:40
. * Re: Другари! Colombino   21.05.05 21:00
. * Re: Другари! xyz   21.05.05 21:39
. * Re: Другари! zaphod   21.05.05 23:30
. * Re: Другари! xyz   22.05.05 01:33
. * Re: Другари! zaphod   22.05.05 09:02
. * Re: Другари! xyz   22.05.05 23:20
. * Бъди джигит! Colombino   22.05.05 23:40
. * Re: Бъди джигит! xyz   23.05.05 13:14
. * бе това на къв компилатор zaphod   23.05.05 14:35
. * Re: бе това на къв компилатор Colombino   23.05.05 14:55
. * оправих го zaphod   23.05.05 15:03
. * я като си зачекал темата zaphod   23.05.05 13:37
. * Баси извратения синтаксис! Colombino   23.05.05 16:20
. * Re: Баси извратения синтаксис! zaphod   23.05.05 17:49
. * Re: я като си зачекал темата void*   23.05.05 20:32
. * Re: я като си зачекал темата zaphod   23.05.05 21:48
. * IDispatch ~!@$%amp;^*()_+   23.05.05 22:54
. * Re: IDispatch zaphod   24.05.05 08:33
. * Re: IDispatch ~!@$%amp;^*()_+   24.05.05 10:02
. * Re: я като си зачекал темата void*   24.05.05 03:27
. * Re: я като си зачекал темата zaphod   24.05.05 08:22
. * Re: я като си зачекал темата void*   24.05.05 14:06
. * тоя метод за викане на конструктор zaphod   23.05.05 14:26
. * Не бачка?!? Colombino   23.05.05 14:33
. * Re: Не бачка?!? zaphod   23.05.05 14:53
. * ами очаквах zaphod   20.05.05 16:18
. * Я пак помисли Colombino   20.05.05 16:48
. * Re: ами очаквах void*   20.05.05 17:19
. * Re: ами очаквах Colombino   20.05.05 17:25
. * Re: ами очаквах void*   20.05.05 18:14
. * Re: ами очаквах Colombino   20.05.05 18:23
. * Re: ами очаквах void*   20.05.05 18:29
. * Ми не знам Colombino   20.05.05 18:37
. * Re: Ми не знам focusnik   20.05.05 18:43
. * Re: Ми не знам void*   20.05.05 19:11
. * Не съм съгласен, мистерията остава Colombino   20.05.05 20:01
. * Re: Не съм съгласен, мистерията остава void*   20.05.05 20:28
. * ето и окончателния отговор void*   22.05.05 03:12
. * Re: ето и окончателния отговор явepтъ   24.05.05 02:31
. * Re: Не съм съгласен, мистерията остава zaphod   20.05.05 22:35
. * Re: Не съм съгласен, мистерията остава void*   21.05.05 00:56
. * ц++ има адски много кусури ~!@$%amp;^*()_+   21.05.05 02:04
. * Re: ц++ има адски много кусури void*   21.05.05 12:01
. * Re: Не съм съгласен, мистерията остава zaphod   21.05.05 07:56
. * Re: Не съм съгласен, мистерията остава BjarneStroustrup®   21.05.05 11:14
. * Подкрепям Colombino   21.05.05 12:32
. * Re: Подкрепям BjarneStroustrup®   21.05.05 12:50
. * Re: я пробвайте да компилирате това: Чвopko   20.05.05 13:38
. * Re: я пробвайте да компилирате това: Пeтpocян   20.05.05 13:40
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.