работа с библиотеками

Тема в разделе "Delphi - Система", создана пользователем Elvis, 13 сен 2005.

Статус темы:
Закрыта.
  1. Elvis

    Elvis Гость

    проблема следующая:
    создан ехешник который норамально работает
    но на машине, на которой не установлен Делфи выдаёт ошибки.
    как можно опредилить какие библиотеки используются проектом.
     
  2. Barmutik

    Barmutik Гость

    Посмотрите любым просмотрщиком зависимостей .. к примеру такой входит в поставку Visual Studio... но опятьже он покажет только статически прилинкованные библиотеки...
     
  3. Sir Alex

    Sir Alex Гость

    Для: Barmutik
    М-дя... вы ему советуете поставить VS ради просмотра прилинкованных DLL? :D

    Для: Elvis
    1-й вариант:
    Выполняете:
    tdump yourprogramm.exe >a.txt
    (tdump есть в каталоге delphi\bin)

    Открываете сгенерированный файл a.txt в любом просмотрщике/редакторе, и смотрите секцию "Import", там список используемых (Статически прилинкованные DLL)

    2-й вариант:
    В новых версиях версиях TotalCommander 6.03... при нажатии F3 на exe так же можно посмотреть прилинкованные библиотеки.

    Если же Вы используете LoadLibrary, то вы и сами должны знать, какие библиотеки требуются.

    P.S. Кстати, если бы у вас не хватало прилинкованной библиотеки, то при загрузке программы, в окне с ошибкой было бы указано, какой именно библиотеки не хватает!
    Так что, лучше приведите ошибку.
     
  4. Barmutik

    Barmutik Гость

    :D Чем пользуюсь то и советую :D
     
  5. Poseidon

    Poseidon Гость

    <!--QuoteBegin-Elvis+13:09:2005, 15:27 -->
    <span class="vbquote">(Elvis @ 13:09:2005, 15:27 )</span><!--QuoteEBegin-->как можно опредилить какие библиотеки используются проектом.
    [snapback]24761" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Код (Text):
    unit ModuleProcs;

    interface

    uses Windows, Classes;

    type
    TModuleArray = array[0..400] of HMODULE;
    TModuleOption = (moRemovePath, moIncludeHandle);
    TModuleOptions = set of TModuleOption;

    function GetLoadedDLLList(sl: TStrings;
    Options: TModuleOptions = [moRemovePath]): Boolean;

    implementation

    uses SysUtils;

    function GetLoadedDLLList(sl: TStrings;
    Options: TModuleOptions = [moRemovePath]): Boolean;
    type
    EnumModType = function (hProcess: Longint; lphModule: TModuleArray;
    cb: DWord; var lpcbNeeded: Longint): Boolean; stdcall;
    var
    psapilib: HModule;
    EnumProc: Pointer;
    ma: TModuleArray;
    I: Longint;
    FileName: array[0..MAX_PATH] of Char;
    S: string;
    begin
    Result := False;

    (* Данная функция запускается только для Widnows NT *)
    if Win32Platform <> VER_PLATFORM_WIN32_NT then
     Exit;

    psapilib := LoadLibrary('psapi.dll');
    if psapilib = 0 then
     Exit;
    try
     EnumProc := GetProcAddress(psapilib, 'EnumProcessModules');
     if not Assigned(EnumProc) then
      Exit;
     sl.Clear;
     FillChar(ma, SizeOF(TModuleArray), 0);
     if EnumModType(EnumProc)(GetCurrentProcess, ma, 400, I) then
     begin
      for I := 0 to 400 do
       if ma[i] <> 0 then
       begin
        FillChar(FileName, MAX_PATH, 0);
        GetModuleFileName(ma[i], FileName, MAX_PATH);
        if CompareText(ExtractFileExt(FileName), '.dll') = 0 then
        begin
         S := FileName;
         if moRemovePath in Options then
          S := ExtractFileName(S);
         if moIncludeHandle in Options then
          sl.AddObject(S, TObject(ma[I]))
         else
          sl.Add(S);
        end;
       end;
     end;
     Result := True;
    finally
     FreeLibrary(psapilib);
    end;
    end;

    end.
    Для вызова приведённой функции надо сделать следующее:

    Добавить listbox на форму (Listbox1)
    Добавить кнопку на форму (Button1)

    Обработчик события OnClick для кнопки будет выглядеть следующим образом

    Код (Text):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    GetLoadedDLLList(ListBox1.Items, [moIncludeHandle, moRemovePath]);
    end;

    <!--QuoteBegin-Sir Alex+13:09:2005, 17:01 -->
    <span class="vbquote">(Sir Alex @ 13:09:2005, 17:01 )</span><!--QuoteEBegin-->В новых версиях версиях TotalCommander 6.03... при нажатии F3 на exe так же можно посмотреть прилинкованные библиотеки.
    [snapback]24769" rel="nofollow" target="_blank[/snapback]​
    [/quote]Что правда? И где же? У меня есть exe около 5 метров. При открытии в тотале он похож на роман (в смысле такой большой текст). И где же там мне искать те самые библиотеки?

    <!--QuoteBegin-Sir Alex+13:09:2005, 17:01 -->
    <span class="vbquote">(Sir Alex @ 13:09:2005, 17:01 )</span><!--QuoteEBegin-->Выполняете:
    tdump yourprogramm.exe >a.txt
    [snapback]24769" rel="nofollow" target="_blank[/snapback]​
    [/quote]Не плохой вариант!!!
     
  6. Sir Alex

    Sir Alex Гость

    <!--QuoteBegin-Poseidon+13:09:2005, 18:00 -->
    <span class="vbquote">(Poseidon @ 13:09:2005, 18:00 )</span><!--QuoteEBegin-->QUOTE(Sir Alex @ 13:09:2005, 17:01 )
    В новых версиях версиях TotalCommander 6.03... при нажатии F3 на exe так же можно посмотреть прилинкованные библиотеки.

    Что правда? И где же? У меня есть exe около 5 метров. При открытии в тотале он похож на роман (в смысле такой большой текст). И где же там мне искать те самые библиотеки?
    [snapback]24776" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    гм.. чуток приврал... у меня Total Commander 6.03a eXtended Pack, там есть плугин "Fileinfo", который собственно и показывает DLLки (и не только)
     
Загрузка...
Похожие Темы - работа библиотеками
  1. Andrey Kha
    Ответов:
    0
    Просмотров:
    21
  2. Hoasker
    Ответов:
    0
    Просмотров:
    64
  3. garri671
    Ответов:
    0
    Просмотров:
    54
  4. lelik200969
    Ответов:
    0
    Просмотров:
    50
  5. Kozolick
    Ответов:
    0
    Просмотров:
    137
Статус темы:
Закрыта.

Поделиться этой страницей