•Вызов функций в чужой длл через мою•

Тема в разделе "WASM.BEGINNERS", создана пользователем x3r0n, 1 фев 2007.

  1. x3r0n

    x3r0n New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    34
    Привет всем! :)
    В WebMoney Keeper в папке KSP есть файл Enum.dll...
    Хочу сделать чтоб при заменене этой длл моей, она работала... Т.е. чтобы вызовы выполнялись ч-з мою длл как прокси... Тока чета непашет :dntknw: хелп плиз в чем дело...

    Вот наработка:
    Код (Text):
    1. Library Enum;
    2.  Uses Windows;
    3.  
    4. const
    5.   csDllFileName = 'enum_old.dll';
    6.  
    7. TYPE
    8.   TDllGetClassObject  = Function(P1,P2,P3:Pointer):HRESULT; stdcall;
    9.     TDllRegisterServer  = Function:HRESULT; stdcall;
    10.     TDllUnregisterServer = Function:HRESULT; stdcall;
    11.  
    12. Var
    13.   _DllHandle           : THandle              ;
    14.     _DllGetClassObject   : TDllGetClassObject   ;
    15.     _DllRegisterServer   : TDllRegisterServer   ;
    16.     _DllUnregisterServer : TDllUnregisterServer ;
    17.  
    18. Function DllCanUnloadNow:HRESULT; stdcall;
    19. Begin
    20.   Result:= S_FALSE;
    21. End;
    22.  
    23. Function DllGetClassObject(P1,P2,P3:Pointer):HRESULT; stdcall;
    24. Begin
    25.   If ( ASSIGNED( _DllGetClassObject ) ) Then
    26.       Result:= _DllGetClassObject( P1, P2, P3 )
    27.     Else    
    28.     Result:= E_NOINTERFACE;
    29. End;
    30.  
    31. Function DllRegisterServer:HRESULT; stdcall;
    32. Begin
    33.   If ( ASSIGNED( _DllRegisterServer ) ) Then
    34.       Result:= _DllRegisterServer
    35.     Else
    36.       Result:= E_NOTIMPL;
    37. End;
    38.  
    39. Function DllUnregisterServer:HRESULT; stdcall;
    40. Begin
    41.   If ( ASSIGNED( _DllUnregisterServer ) ) Then
    42.       Result:= DllUnregisterServer
    43.     Else
    44.       Result:= E_NOTIMPL;
    45. End;
    46.  
    47. Exports
    48.   DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServer;
    49.    
    50. Begin
    51.   _DllHandle:= LoadLibrary( csDllFileName );
    52.     If ( _DllHandle <> 0 ) Then
    53.     Begin
    54.       _DllGetClassObject  := GetProcAddress( _DllHandle, 'DllGetClassObject'   );
    55.         _DllRegisterServer  := GetProcAddress( _DllHandle, 'DllRegisterServer'   );
    56.         _DllUnregisterServer:= GetProcAddress( _DllHandle, 'DllUnregisterServer' );
    57.     End;
    58. End.
     
  2. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Для начала почитай что такое COM сервера, как они регистрируются и как это все работает:))
     
  3. x3r0n

    x3r0n New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    34
    Прочитал статью http://www.wasm.ru/article.php?article=comkit2 нихера ниче непонял :)
    Кто понимает в теме помогите плиз...
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    тебе еще рано статью на васме читать :))
    Иди читай гугль:
    http://www.google.ru/search?hl=ru&q=%22%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F+COM+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%22&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
     
  5. x3r0n

    x3r0n New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    34
    Все сделал... Клозет...