Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Опасно это 05.08.03 17:16 Число просмотров: 1119
Автор: amirul <Serge> Статус: The Elderman
|
> как отучить вс заниматся этой дурью для экспортируемых > __stdcall функций? я ща вставляю вначало строчку типа > такой: > #pragma comment(linker, "/export:MyFunc=_MyFunc@4") > получается 2 экспортируемых фуникции указывающих на один и > тот же код- одна разукрашенная, а вторая нет. криво как-то, > может есть более ровный путь?
Лучше бы и не вставлять, а или пользоваться fastcall/cdecl или юзать как есть. __stdcall это соглашение при котором параметры выкладываются с начала, и, самое главное, за очистку стека отвечает вызываемая функция. Поэтому и нужно чтобы в названии, которое видит линкер присутствовало количество снимаемых байт. А то какой нить модуль экспортнет __stdcall функцию с одним количеством аргументов, а другой модуль импортнет ее по такому же названию, но с другим. Линкер это все тихо слинкует. Результат: срыв стека и крах.
Если же ты делаешь dll-ку (то есть функция экспортируется не из lib-ы), то нужно использовать __declspec(dllexport) - в этом соглашении в dll-ку функция экспортнется по своему нормальному названию.
Точно так же как обычное cpp-оское мангление сделано для того, чтоб линкер видел разные названия для функций, имеющих разные типы аргументов. Прототипов то ему не дано увидеть.
|
|
|