Форум: "Потрепаться";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
ВнизПомогите плиз с C Найти похожие ветки
← →
Piter © (2005-08-17 22:44) [0]Читаю тут о том, как делать плагины к миранде, инфа в основном на C, кое что-непонятно.
Miranda - это програма-messenger, в том числе и для сети ICQ.
Плагины к ней - обычные DLL.
Вот что пишут:#define MIRAPI extern "C" __declspec(dllexport)
extern "C"
{
#include "../../../sdk/headers_c/newpluginapi.h"
#include "../../../sdk/headers_c/m_clist.h"
#include "../../../sdk/headers_c/m_skin.h"
}
Здесь в первой строке объявляется макрос MIRAPI, который в дальнейшем будет использоваться в качестве модификатора при объявлении экспортированных функций. Суть этого макроса — экспортировать функцию и установить для нее компоновку в стиле С, что необходимо для распознания ее мирандой
честно говоря, не понимаю это предложение. Что за модификатор для объявления экспортированных функций? И как тогда экспортировать функции в Delphi библиотеки, чтобы все совместилось?
И далее объявляют экспортируемые функции с помощью этого макроса:MIRAPI int Load(PLUGINLINK *link)
{
pluginLink = link;
Короче, не понимаю я этих премудростей - может кто разъяснит?
P.S. Линк вот - http://miranda.pp.ru/forum/viewtopic.php?t=37&sid=d1349df9770a93cc4555fc9b0e5f6ce5
← →
Eraser © (2005-08-17 22:46) [1]Piter © (17.08.05 22:44)
Я так понимаю, чтобы писать в делфи нужно просто объявлять ф-ии как cdecl.
← →
DrPass © (2005-08-17 23:08) [2]
> Короче, не понимаю я этих премудростей - может кто разъяснит?
Ничего хитрого - просто вместо MIRAPI подставляется extern "C" __declspec(dllexport). Это просто объявление экспортируемой из DLL функции, и чтобы было без сиплюсплюсного переименования
← →
Piter © (2005-08-17 23:17) [3]DrPass © (17.08.05 23:08) [2]
ага, понятно. То есть, это и есть обычный stdcall
← →
Джо © (2005-08-17 23:24) [4]
> [3] Piter © (17.08.05 23:17)
> DrPass © (17.08.05 23:08) [2]
>
> ага, понятно. То есть, это и есть обычный stdcall
Нет, это есть обычный cdecl.
← →
Piter © (2005-08-17 23:27) [5]А Eraser, судя по всему, прав.
Данная конструкция именно обозначает тип вызова как cdecl.
Странно... зачем разработчики Miranda отошли от общепринятого stdcall?
← →
Piter © (2005-08-17 23:27) [6]Джо © (17.08.05 23:24) [4]
ага, понял уже...
← →
jack128 © (2005-08-17 23:29) [7]Piter © (17.08.05 23:27) [5]
Странно... зачем разработчики Miranda отошли от общепринятого stdcall?
Ну например разработчики IB тоже отошли от "общепринятого" stdcall. Может фишка в том, что stdcall не так уж и общепринят?? ;)
← →
Piter © (2005-08-17 23:43) [8]jack128 © (17.08.05 23:29) [7]
хм. Может.
Но тот же Рихтер утверждает, что именно для библиотек - это как стандарт.
И рекомендует пользоваться именно этим типом вызова, чтобы не вносить неясности.
Все таки стоит признать, что большинство виндовых библиотек именно так работают.
Так зачем делать по другому?
Ведь другой тип вызова, насколько я понимаю, не несет никаких преимущество (впрочем, как и недостатков)...
← →
Alexander Panov © (2005-08-17 23:50) [9]Piter © (17.08.05 23:43) [8]
Насколько мне помнится, для С как раз CDECL и является стандартом. Windows и его библиотеки тут совершенно ни при чем.
Microsoft решила, что у нее будет stdcall. Это ее право.
← →
GuAV © (2005-08-18 00:09) [10]
> Ведь другой тип вызова, насколько я понимаю, не несет
> никаких преимущество (впрочем, как и недостатков)...
Преимущества cdecl в возможности переменного числа аргументов, однако она менее эффективна (по производительности) чем stdcall. Register намного эффективнее, MS наверно отказались от такого способа чтобы не создавать лишних правил, какой тип когда передаётся в регистре, порядок регистров, etc.
Ещё преимущество stdcall, что если составить record из параметров и указать {$A4} стек м.б. приведен к такому record.
pascal - почти stdcall, только наоборот, и некоторые типы не по значению а по ссылке, что эффективнее.
← →
Piter © (2005-08-18 00:41) [11]GuAV © (18.08.05 0:09) [10]
Register намного эффективнее
Delphi рулит :)
← →
DrPass © (2005-08-18 00:56) [12]__fastcall тоже :)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c