Формы вызова функции в dll

Тема в разделе "WASM.WIN32", создана пользователем NoName, 17 янв 2011.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Нужно придумать как справляться с вызовом функций которые работают по разному (stdcall и другие) из некоторых зараннее неизвестных dll. Даже одна dll может собираться из obj от разных компиляторов (microsoft, borland и т.п.).
    Может у кого-то есть готовое решение/идея?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    решение можно подсмотреть у Микрософта, например процедура ExceptionHandler под 2k+ может быть и cdecl и stdcall(хотя должна быть cdecl), такая вот "защита от дурака" :)

    :77F8F436 ExecuteHandler@20:
    :77F8F436 push ebp
    :77F8F437 mov ebp, esp
    :77F8F439 push [ebp+arg_8]
    :77F8F43C push edx
    :77F8F43D push large dword ptr fs:0
    :77F8F444 mov large fs:0, esp
    :77F8F44B push [ebp+arg_10]
    :77F8F44E push [ebp+arg_C]
    :77F8F451 push [ebp+arg_8]
    :77F8F454 push [ebp+arg_4]
    :77F8F457 mov ecx, [ebp+arg_14]
    :77F8F45A call ecx
    :77F8F45C mov esp, large fs:0
    :77F8F463 pop large dword ptr fs:0
    :77F8F46A mov esp, ebp
    :77F8F46C pop ebp
    :77F8F46D retn 14h
    :77F8F46D _RtlpExecuteHandlerForException@20 endp