Как и возможно ли включить DLL в екзешку

Тема в разделе "WASM.BEGINNERS", создана пользователем xlinuks, 26 авг 2006.

  1. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Привет всем, мне нужно поставить в windows хук на клавиатуру, поэтому нужно сделать DLL, поэтому фактически мое приложение будет из 2 файлов, а очень не хочется чтобы приложение было из больше чем одного файла, тем более что оно будет очень малое, по этому вопрос, если возможно то как включить DLL в екзешку которая использует этот DLL?
    Если нельзя то у меня тока две возможности, либо сделать чтото на подобии инсталятора который бы извлекал из себя эти два файла, либо я даю знать юзверям чтобы скачали оба файла и чтобы DLL сами поставили в папку windows (но эт уже маразм я думаю)
    Кто поможет ставлю ящик пива :))
     
  2. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Дроп длл из себя и установка.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    DLL кидаешь в ресурсы. И смотри описание FindResource, LoadResource, LockResource
     
  4. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    ок rmn, иду смотреть, спасибо
     
  5. CrazyFun

    CrazyFun New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2005
    Сообщения:
    129
    ну создаешь файл длл, а содержимое - код длл пишешь из своих данных.
    ну и потом почему длл должна быть в папке виндовз?? достаточно папки с твоей прогой.
    для глобального хука процедура-обработчик ловушки _должна_ находиться в оддельном длл файле, так как он будет проецироватся к порцессу в котром сработал хук.
     
  6. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    CrazyFun - в windows чтобы чайник не стер .dll случайно (думая что мусор, бывает и такое)
    хорошо, спасибо, думаю прога будет распространятся в .zip файле где будут оба файла, и readme.txt в котором напишу что оба файла (.dll & .exe) всегда должны находится в тойже директории.
     
  7. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    xlinuks
    Это сделать очень просто! Как уже сказали выше, помести DLL'ку в ресурсы программы. Далее, при запуске программа должна извлечь из своих ресурсов DLL'ку. Вот и все. Ниже я приведу код программы на ассемблере (MASM32+Win32 API), который делает то, что тебе нужно. Она извлекает из своих ресурсов DLL'ку, подгружает ее, и вызывает ее функцию. Изменить ее под твои нужды очень просто. Главное на что тебе нужно обратить внимание, это функция EXres. Именно эта функция извлекает файл из ресурсов и записывает его на диск. Вот код программы (не помню уже, где взял ее):

    Код (Text):
    1. .686
    2. .model flat,stdcall
    3. option casemap:none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\kernel32.inc
    6. include \masm32\include\advapi32.inc
    7. includelib \masm32\lib\advapi32.lib
    8. includelib \masm32\lib\kernel32.lib
    9. include \masm32\include\user32.inc
    10. includelib \masm32\lib\user32.lib  
    11.  
    12. .data
    13. LibName db "Test_DLL.dll",0
    14. Name_Main_Exe db "main", 0
    15. RsrcName db "DLLFile", 0
    16. fName db "C:\New\Test_DLL.dll", 0
    17. hFile dd 0
    18. written dd 0
    19.  
    20. MSGText db 'DLL-ка извлечена и загружена!', 0
    21. MSGCaption db 'Внимание!!!', 0
    22.  
    23. EXres PROTO
    24.  
    25. .data?
    26. hLib dd ?
    27. folderbuffer db 512 dup(?)
    28. .code
    29. start:
    30.     invoke GetFullPathName,
    31.     invoke EXres
    32.     invoke LoadLibrary,addr LibName
    33.     mov hLib,eax
    34.     invoke MessageBox, NULL, offset MSGText, offset MSGCaption, MB_OK
    35.     invoke FreeLibrary, hLib
    36.     invoke DeleteFile, addr fName
    37.     invoke ExitProcess, NULL
    38.    
    39. EXres PROC  
    40.     local hResInfo_file_1:HRSRC
    41.     local cb_file_1:UINT
    42.     local pRes_1:LPVOID
    43.     invoke FindResource, NULL, addr RsrcName, addr Name_Main_Exe
    44.     .if eax != NULL
    45.         mov hResInfo_file_1, eax
    46.         invoke LoadResource, NULL, hResInfo_file_1
    47.         .if eax != NULL
    48.             mov pRes_1, eax
    49.             invoke SizeofResource, NULL, hResInfo_file_1
    50.             mov cb_file_1, eax
    51.             invoke LockResource, hResInfo_file_1
    52.             invoke lstrcat, ADDR folderbuffer, ADDR fName
    53.             invoke CreateFile,OFFSET folderbuffer, GENERIC_WRITE,FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
    54.             mov hFile,eax
    55.             invoke WriteFile,hFile,pRes_1,cb_file_1,OFFSET written,NULL
    56.             invoke CloseHandle,hFile
    57.         .endif
    58.     .endif
    59.     ret
    60. EXres ENDP
    61.  
    62. end start
    в данном случае для того чтобы добавить файл в рессурсы в файл .RC была добавлена следующая строка:
    DLLFile main Test_DLL.dll

    Вот и все
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    лучше помещать ДЛЛ в .data или .code, так незаметнее
     
  9. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Можно экзешник загружать как диэлл.
    В нем должна быть директория релоков, и если надо то директория экспорта.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    /off
    Итого - 6 ящиков пива :)
     
  11. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    Все! ставлю пиво! Приезжайте в молдову в гости! :))
    (яж не заикался про доставку ;) )
     
  12. _DRON_

    _DRON_ New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2006
    Сообщения:
    1
    Если ставить хук WH_KEYBOARD_LL, то DLL-ка вообще не потребуется.
     
  13. xlinuks

    xlinuks New Member

    Публикаций:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    181
    даа?? обьясни по подробнее плиз, или укажи где можно прочитать..
     
  14. tmp_name_0001

    tmp_name_0001 New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    85
    А MSDN пробовал?

     
  15. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    PE Bundle