Site Tools


dll_динамические_библиотеки

Хорошая информация по данному вопросу, дана в книге С++ Cookbook \ C++ Сборник рецептов. Или Microsoft MSDN или http://citforum.ru/book/cook/dll0.shtml

Определение внешних функций

… доступных из DLL при его работе.

Используется либо DEF-файл,
либо __declspec(dllexport) перед функцией, классом, данными.

Компиляция

(windows VS):

Пример компиляции объектного файла:

cl -c -nologo -EHsc -GR -Zc:forScope -Zc:wchar_t -Fohellobeatles.obj hellobeatles.cpp

Пример компиляции статической библиотеки:

lib -nologo -out:georgeringo.lib george.o ringo.o georgeringo.o

Пример компиляции DLL

link -nologo -dll -out:libgeorgeringo.dll -implib:georgeringo.lib george.obj ringo.obj georgeringo.obj

Пример компиляции приложения

link -nologo -out:hellobeatles.exe georgeringo.lib libjohnpaul.lib hellobeatles.obj
Получение lib из dll

Используется implib.exe (для Borland)
или http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q131313

Получение информации из стороннего DLL файла

Поумолчанию, используется утилита DUMPBIN из командной строки VisualStudio

Пример испльзования, для получения списка доступных функций из DLL:

C:\CPP\bibliotek\georgeringo>DUMPBIN /EXPORTS C:\Windows\System32\basecsp.dll
Dump of file C:\Windows\System32\basecsp.dll

File Type: DLL

Section contains the following exports for BaseCSP.dll

  00000000 characteristics
  4CE793E4 time date stamp Sat Nov 20 13:24:52 2010
      0.00 version
         1 ordinal base
        28 number of functions
        28 number of names

  ordinal hint RVA      name

        1    0 000028B5 CPAcquireContext
        2    1 000029C0 CPAcquireContextW
        3    2 000095F8 CPCreateHash
        4    3 0000955D CPDecrypt
        5    4 00008F60 CPDeriveKey
        6    5 00009868 CPDestroyHash
        7    6 00009038 CPDestroyKey
        8    7 00009A66 CPDuplicateHash
        9    8 00009B2A CPDuplicateKey
       10    9 000094BC CPEncrypt
       11    A 00009340 CPExportKey
       12    B 00008E7E CPGenKey
       13    C 0000992A CPGenRandom
       14    D 000092B6 CPGetHashParam
       15    E 000090EF CPGetKeyParam
       16    F 00001FCA CPGetProvParam
       17   10 000099A7 CPGetUserKey
       18   11 000096CF CPHashData
       19   12 00009753 CPHashSessionKey
       20   13 000093DB CPImportKey
       21   14 000033EB CPReleaseContext
       22   15 00009232 CPSetHashParam
       23   16 0000906C CPSetKeyParam
       24   17 000091B0 CPSetProvParam
       25   18 000097DC CPSignHash
       26   19 0000989C CPVerifySignature
       27   1A 00009C69 DllRegisterServer
       28   1B 00009BEE DllUnregisterServer

Summary

      1000 .data
      1000 .reloc
      6000 .rsrc
     1A000 .text

Использование extern "C" в коде

Хорошо описано на странице http://www.gamedev.ru/code/forum/?id=56367

Получение lib из def

dlltools -k -d sqlite.def -l sqlite.dll
а так же это могут делать lib.exe из msvc и implib из borland

Вопросы

TODO: написать собственные примеры lib dll def и код их использования между собой

1

Что такое:

  • lib
  • dll
  • def
  • a

и за что они отвечают

2

Статические и динамические - разность в использование, подключение, создание и т.д.

You could leave a comment if you were logged in.
dll_динамические_библиотеки.txt · Last modified: 2016/03/27 03:29 by conovaloff

Page Tools