[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Надо знать, что экспортировать из библиотеки dll, то есть какие функции экспортные.

    Code:
    
    // Есть экспортная функция, которая заранее известна и находится в dll 
    // вот её прототип
    f: function (p: PChar; b: Boolean): Boolean;
    
    // Вот эта функция осуществляет загрузку dll библиотеки
    // в адресное пространство вашей программы
    procedure Call(DllName, ProcName: PChar); 
    var 
      hModule: THandle; 
      P: Pointer; 
    begin 
      f := NIL;  
      hModule := LoadLibrary(DllName); 
      if hModule <> 0 then p := GetProcAddress(hModule, ProcName); 
      if p <> NIL then f('ЗАРАНЕЕ_ИЗВЕСТНАЯ_ЭКСПОРТИРУЕМАЯ_ФУНКЦИЯ', false); 
    end;
    
    В итоге получается следующее

    Code:
    var
      Form1: TForm1;
      // Есть экспортная функция, которая заранее известна и находится в dll
    // вот её прототип
      f: function (p: PChar; b: Boolean): Boolean;
    implementation
    
    {$R *.dfm}
    
    
    // Вот эта функция осуществляет загрузку dll библиотеки
    // в адресное пространство вашей программы
    procedure Call(DllName, ProcName: PChar);
    var
      hModule: THandle;
      P: Pointer;
    begin
      f := NIL;
      hModule := LoadLibrary(DllName);
      if hModule <> 0 then p := GetProcAddress(hModule, ProcName);
      if p <> NIL then f('ЗАРАНЕЕ_ИЗВЕСТНАЯ_ЭКСПОРТИРУЕМАЯ_ФУНКЦИЯ', false);
    end;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Call('1.dll', 'ЗАРАНЕЕ_ИЗВЕСТНАЯ_ЭКСПОРТИРУЕМАЯ_ФУНКЦИЯ');
    end;
    
    
     
  2. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Снайпер, ты как-то мысли коряво свои излагаешь.
    Это ты шеллэкзекутом длл открываешь? о_О Напиши обработчик нажатия на кнопку, в начале кода заюзай LoadLibrary, в конце FreeLibrary, если либа тебе не нужна. Кстати, хочу посоветовать заглянуть в документацию Delphi, там написано, как юзать динамическую загрузку библиотек
     
  3. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Горазда проще работать с библиотекой вот так:

    Code:
    var
      Form1: TForm1;
      // прототип вызываемой функции
      function func1(p:PChar):Boolean;stdcall; external '1.dll';
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // вызываем 
    func1('ЗАРАНЕЕ_ИЗВЕСТНАЯ_ЭКСПОРТИРУЕМАЯ_ФУНКЦИЯ');
    end;
    
     
  4. SNAIPER ShoT

    SNAIPER ShoT Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    48
    Likes Received:
    3
    Reputations:
    0
    Вот такой принцип нужен.. -->Link<--
     
  5. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Так и есть, объясни лучше, dll твоя или чужая?
     
  6. SNAIPER ShoT

    SNAIPER ShoT Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    48
    Likes Received:
    3
    Reputations:
    0
    чужая...
    и когда запускаю уже прогу она пишет всякую хню и закрывается. =(
     
  7. Попрошайка

    Joined:
    14 Jun 2007
    Messages:
    25
    Likes Received:
    4
    Reputations:
    0
    в Uses добавь ShellAPI , а

    в обработчик события

    begin
    ShellExecute (Handle, 'OPEN',PChar ('www.ya.ru'), nil, nil, SW_SHOWNORMAL);
    end;

    И будет тебе счастье.
     
  8. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Так ты должен знать, что экспортировать из библиотеки dll. Что конкретно надо сделать? Что бы твоя программа вызвали некоторую функцию из библы, правильно? что за dll'ка.
     
  9. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Для *.exe файлов лучше WinExec('1.exe',SW_SHOW);
     
  10. SNAIPER ShoT

    SNAIPER ShoT Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    48
    Likes Received:
    3
    Reputations:
    0
    эта dll'ka просто должна влезть в другой процесс. Тоесть когда я нажимаю на лоад мой exe должен прятатся в Древо процессов... Вот а dll'ka просто должна загружатся вся в процес hl.exe :D мож кто знает такой.
     
  11. SNAIPER ShoT

    SNAIPER ShoT Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    48
    Likes Received:
    3
    Reputations:
    0
    А по подробнее мона? :)
     
  12. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Перехват API функций.

    http://www.wasm.ru/article.php?article=apihook_1
    http://www.wasm.ru/article.php?article=apihook_2
    http://www.wasm.ru/article.php?article=apihook_3

    ЗЫ, мне кажется это не для новичков.
     
  13. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    На винапи в данном случае я думаю будет очень легко.

    Читаем файл в массив байтов через ReadFile(), потом шифруем побайтово после чего записываем массив в файл через WriteFile :)
     
  14. rankor777

    rankor777 Elder - Старейшина

    Joined:
    11 Jan 2008
    Messages:
    15
    Likes Received:
    23
    Reputations:
    0
    всем прив! вопрос такой: пишу прогу, для нее необходим юнит Ariphm.dcu, в комплекте с Борланд Делфи7 он не идет, гугл не помогает. подскажите плз, где его взять?
    заранее спс )
     
  15. Dober'man

    Dober'man Banned

    Joined:
    16 Jul 2007
    Messages:
    70
    Likes Received:
    94
    Reputations:
    -8
    3 people like this.
  16. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    (c) DelphiWorld
     
    1 person likes this.
  17. SNAIPER ShoT

    SNAIPER ShoT Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    48
    Likes Received:
    3
    Reputations:
    0
    А мне так с длл и не кто не поможет ? :(
     
  18. Dr.Bodja

    Dr.Bodja Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Ребята помогите пожалуйста. Суть задачи, нужно из Label.Caption сохранить данные в файл, это у меня получилось быстро, опыт работы с паскалем имею, но мне хочется, чтобы путь не был сразу прописан, и чтобы его не вводить в строку edit, а чтобы была кнопка "Обзор" после нажатия которой, появлялось окошко windows где можно было бы выбрать путь, куда сохранять файл. Зарание спасибо.
     
    #1758 Dr.Bodja, 18 Jun 2008
    Last edited: 18 Jun 2008
  19. qPhoenix

    qPhoenix Banned

    Joined:
    15 Dec 2005
    Messages:
    87
    Likes Received:
    50
    Reputations:
    8
    2 Dr.Bodja
    Code:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var Fil:TextFile;
        SaveDialog1:TSaveDialog;
    begin
     SaveDialog1:=TSaveDialog.Create(nil);
     if SaveDialog1.Execute then
     begin
      assignfile(Fil,SaveDialog1.FileName);
      //...//
     end;
     SaveDialog1.Free;
    end;
     
  20. Dr.Bodja

    Dr.Bodja Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Спасибо большое!
     
Thread Status:
Not open for further replies.