Привет. При выходе из функции, указатель на которую мы взяли из подлинкованной библиотеки, проиходит ошибка такого характера: (я не могу понять в чём причина)
--------------------------------------------------------------------------------------
Debug Error!
The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
---------------------------------------------------------------------------------------
А ошибка происходит при выходе из:
А как сделать правильно по первому пункту и по второму...
по второму я пробовал добавлять WINAPI: "...void WINAPI main(......", но в этом случае у меня получается, что не находится функция main из библиотеки....
Был бы очень признателен, если бы ты помог и объяснил мне поподробнее :)
> 1) как то это не хорошо определять main() с нестандартными > параметрами > > 2) не линкуется потому что в main не указал WINAPI
[C++] Проблемы с подлинковкой DLL. Нужна помощь!!!04.07.02 02:27 Автор: ggg <ggg> Статус: Elderman
1) просто назови функцию по другому (напр. MyProc())
main() в C занята и не используется в dll
2) в зависимости от типа функции к её имени могут добавляться разные значки (декорированное имя)
чтобы экспортировать функцию с нужным именем укажи в параметрах линкера /export:exportName=internalName
(а вот здесь уже ничто не мешает exportName задать как main, т.е. /export:main=MyProc)
[C++] У тебя срыв стека потому, что:04.07.02 04:12 Автор: Zef <Alloo Zef> Статус: Elderman
ф-ция объявлена как __declspec, значит после выхода из нее вызывающий код сам должен удалять переменные из стека:
PUSH Par1
.
.
.
PUSH ParN
CALL Function
ADD ESP,N,
а вызываешь ты ее по умолчанию как __stdcall. __stdcall - ф-ции сами должны "убирать за собой" вот так:
RET N.
В твоем это должно выглядеть так:
EXECFUNC=((void __declspec(*)(int *,int))GetProcAddress(hLib, "main");