Article View: pl.comp.lang.delphi
Article #345410Dynamiczne ładowanie DLL
From: stchebel
Date: Mon, 05 Dec 2016 13:03
Date: Mon, 05 Dec 2016 13:03
62 lines
3251 bytes
3251 bytes
Witam,
Temat jest w zasadzie kontynuacją innego wątka(Raspberry/Lazarus/FTDI), ale żeby zbytnio nie mieszać postanowiłem problem opisać w odrębnym wątku. Otóż zgodnie z Waszymi sugestiami pojąłem próbę dynamicznego ładowania dll'ki FTDI. Na formie jest położony Button i Label. Cały kod wygląda tak:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, D2XXUnit;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FT_HANDLE:DWord=0;
ftresult:integer;
DLL_Handle:THandle;
FT_Open_Func:function(PVDevice:Integer; ftHandle:Pointer):integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DLL_Handle:=LoadLibrary('ftd2xx.dll');
@FT_Open_Func:=GetProcAddress(DLL_Handle,'FT_Open');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ftresult:=FT_Open_Func(0,@FT_HANDLE);
Label1.Caption:=IntToStr(ftresult);
end;
end.
No i teraz tak (zarówno D6 jak i Lazarus):
1) Po Button1Click wyskakuje błąd(D6):"Project1.exe faulted with message:'access violation at 0x000312d5: write of address 0x10c00000'.Process stopped.Use Step or Run to continue"
2) Jeżeli "zakomentarzuję" w Button1Click tylko wywołanie funkcji FT_Open_Func, to jest OK, wartość Label1 zmienia się na '0'.
3) Jeżeli "zakomentarzuję" w Button1Click tylko Label1.Caption....., to też jest OK, ale oczywiście Label1.Caption pozostaje bez zmian.
4) Zamiast Label1, położyłem na formie TrackBar i robiłem experyment TrackBar1.Position:=IntToStr(ftresult). Wówczas program normalnie przechodzi.
5) Inna sprawa, że wykonanie funkcji FT_Open jest błędne. Przy podłączonym urządzeniu FTDI do komputera, powinno mi zwrócić wartość 0, tymczasem zwraca 2.
Co robię źle? Bardzo proszę o wskazówki.
Technical Details
Message-ID:
<d4e0b6e4-835d-4acd-b39f-9badaa7abbc1@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!n6no2785624qtd.0!news-out.google.com!j8ni5137qtc.0!nntp.google.com!n6no2785620qtd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailShow Full Headers
Complete Article Headers
X-Received: by 10.99.158.26 with SMTP id s26mr27711380pgd.52.1480943013551; Mon, 05 Dec 2016 05:03:33 -0800 (PST) X-Received: by 10.157.39.129 with SMTP id c1mr3638288otb.15.1480943013473; Mon, 05 Dec 2016 05:03:33 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!n6no2785624qtd.0!news-out.google.com!j8ni5137qtc.0!nntp.google.com!n6no2785620qtd.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.delphi Date: Mon, 5 Dec 2016 05:03:33 -0800 (PST) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=185.53.155.198; posting-account=67yd9woAAAAHUu8VHyA7Js47M98NE3m3 NNTP-Posting-Host: 185.53.155.198 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <d4e0b6e4-835d-4acd-b39f-9badaa7abbc1@googlegroups.com> Subject: Dynamiczne ładowanie DLL From: stchebel@gmail.com Injection-Date: Mon, 05 Dec 2016 13:03:33 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit