может кто знает ???
От: Аноним  
Дата: 02.12.02 06:45
Оценка:
Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
Re: может кто знает ???
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.12.02 07:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>

А>Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
писать после декларации каждой функции stdcall;. Например
function MyFunc(a: integer): integer; stdcall;
Пользуюсь RSDN@Home 1.0 alpha 15, слушая Ltr05
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: А в С++ такое не проходит!
От: Креатив Рекъйооред  
Дата: 02.12.02 08:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>писать после декларации каждой функции stdcall;. Например

S>function MyFunc(a: integer): integer; stdcall;

Билдер сам строит непонятные свои названия и они накак не зависят от того, какой call написан.
Ваша программа работает корректно? Один звонок и я всё исправлю!

Делаю потенциальные фичи :))
Re[2]: может кто знает ???
От: _MMX_  
Дата: 04.12.02 07:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:


А>>

А>>Короче ситуация компилирую DLL и подставляю вместо системной, ИТОГ: винда не может вызвать не одной функции. Т.к. список экспортируемых функций отличаеться (имена функций) не такие как в стандартной DLL., Короче как собрать DLL так что бы имена не изменились
S>писать после декларации каждой функции stdcall;. Например
S>function MyFunc(a: integer): integer; stdcall;

я пробовал stdcall и нашел в helpe _msfastcall не подходит)) тут дело в другом при експорте он приписывает какието префиксы каждой функции)) пробовал кучу всего не получаеться )) но точно уверен что такое возможно
Re: Знают, но молчат :-))
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.12.02 07:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>

А>Короче ситуация компилирую 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.