Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
Здравствуйте, <Аноним>, Вы писали:
А>
А>Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
писать после декларации каждой функции stdcall;. Например
function MyFunc(a: integer): integer; stdcall;
Пользуюсь RSDN@Home 1.0 alpha 15, слушая Ltr05
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>
А>>Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
S>писать после декларации каждой функции stdcall;. Например
S>function MyFunc(a: integer): integer; stdcall;
я пробовал stdcall и нашел в helpe _msfastcall не подходит)) тут дело в другом при експорте он приписывает какието префиксы каждой функции)) пробовал кучу всего не получаеться )) но точно уверен что такое возможно
Здравствуйте, Аноним, Вы писали:
А>
А>Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
Примерно так (на Билдере):
extern "C" {
__declspec(dllexport) void __stdcall SomeFunction();
}
А вообще, для предотвращения name mangling существует несколько путей:
1. DEF-файлы (в Дельфи это секция Exports)
2. Указанный выше квалификатор extern "C" && __declspec(dllexport)
3. Настройка проекта в IDE (если IDE предоставляет опцию типа "Don't mangle names")
И, как правильно заметил Sinclair, вам надо четко соблюдать соглашения о вызовах — большинство функций WinAPI имеют паскалевское соглашение о вызове, т.е. __stdcall.