Thread View: pl.comp.lang.delphi
16 messages
16 total messages
Started by stchebel
Fri, 09 Dec 2016 10:17
Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Fri, 09 Dec 2016 10:17
Date: Fri, 09 Dec 2016 10:17
67 lines
3268 bytes
3268 bytes
Witam,
Jeszcze raz dzięki za sugestie w siostrzanych wątkach Lazarus/RPi/DLL/FTDI..
Zgodnie z Waszymi sugestiami zrobiłem programik na RPi. Jak zwykle forma, na niej Button i Label. Cały program wygląda tak:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,Messages
,ComCtrls,Variants,DynLibs;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
FT_HANDLE: Dword=0;
ftresult: integer;
DLL_Handle:THandle;
FT_Open_Fun:function (PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(FT_Open_Fun) then
ftresult:=FT_Open_Fun(0,@FT_HANDLE)
else
ShowMessage('Dupa blada');
Label1.Caption:=IntToStr(ftresult);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DLL_Handle:=LoadLibrary('/home/pi/Lazarus_Projects/Open_Port/lib/arm-linux/libftd2xx.so.1.3.6');
Pointer(FT_Open_Fun):=GetProcAddress(DLL_Handle,'FT_Open');
end;
end.
Program działa, ale niestety zwraca mi nieprawidłową wartość z funkcji FT_Open_Fun (skojarzona z funkcją FT_Open z biblioteki). Zwraca mi wartość 2, co jest kodem błędu FT_DEVICE_NOT_FOUND.Powinno zwrócić wartość 0. Pierwsze co pomyślałem,to jest jakiś problem z moim HW. Nic podobnego, odpalam program z examples/EEPROM/read (załączony do bibliotek FTDI) i wszystko jest OK. Elegancko otwiera port i prawidłowo odczytuje zawartość EEPROM'a. Biblioteki do RPi pobieram stąd:
http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-arm-v6-hf-1.3.6.tgz
Jest tam trochę opisów jak to zainstalować i takie tam..
Macie Koledzy jakiś pomysł?
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: Piotr S.
Date: Fri, 09 Dec 2016 11:35
Date: Fri, 09 Dec 2016 11:35
20 lines
2011 bytes
2011 bytes
W dniu 2016-12-09 o 11:17, stchebel@gmail.com pisze: > Witam, > Jeszcze raz dzięki za sugestie w siostrzanych wątkach Lazarus/RPi/DLL/FTDI.. > Zgodnie z Waszymi sugestiami zrobiłem programik na RPi. Jak zwykle forma, na niej Button i Label. Cały program wygląda tak: > [...] > > Program działa, ale niestety zwraca mi nieprawidłową wartość z funkcji FT_Open_Fun (skojarzona z funkcją FT_Open z biblioteki). Zwraca mi wartość 2, co jest kodem błędu FT_DEVICE_NOT_FOUND.Powinno zwrócić wartość 0. Pierwsze co pomyślałem,to jest jakiś problem z moim HW. Nic podobnego, odpalam program z examples/EEPROM/read (załączony do bibliotek FTDI) i wszystko jest OK. Elegancko otwiera port i prawidłowo odczytuje zawartość EEPROM'a. Biblioteki do RPi pobieram stąd: > > http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-arm-v6-hf-1.3.6.tgz > > Jest tam trochę opisów jak to zainstalować i takie tam.. > > Macie Koledzy jakiś pomysł? > > Jesteś pewien, że w przypadku RPi ma być stdcall? A może cdecl? stdcall wykorzystywany jest głównie w przypadku platformy Windows. P.S.
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Fri, 09 Dec 2016 11:52
Date: Fri, 09 Dec 2016 11:52
9 lines
1617 bytes
1617 bytes
W dniu piątek, 9 grudnia 2016 12:35:29 UTC+1 użytkownik Piotr S. napisał: > > Jesteś pewien, że w przypadku RPi ma być stdcall? A może cdecl? stdcall > wykorzystywany jest głównie w przypadku platformy Windows. > > P.S. Niestety, dalej to samo :(
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: Piotr S.
Date: Fri, 09 Dec 2016 11:58
Date: Fri, 09 Dec 2016 11:58
13 lines
1277 bytes
1277 bytes
W dniu 2016-12-09 o 12:52, stchebel@gmail.com pisze: > > > Niestety, dalej to samo :( > Hmmm. To zrób jeszcze inaczej. Usuń konwencję wywołania. Zostaw samo: > FT_Open_Fun:function (PVDevice:Integer; ftHandle:Pointer ) : integer ; Oczywiście w przypadku Win32 ma być z stdcall. P.S.
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Fri, 09 Dec 2016 12:13
Date: Fri, 09 Dec 2016 12:13
13 lines
1702 bytes
1702 bytes
W dniu piątek, 9 grudnia 2016 12:58:02 UTC+1 użytkownik Piotr S. napisał: > W dniu 2016-12-09 o 12:52, stchebel@gmail.com pisze: > > > > > > Niestety, dalej to samo :( > > > > Hmmm. To zrób jeszcze inaczej. Usuń konwencję wywołania. Zostaw samo: > > > FT_Open_Fun:function (PVDevice:Integer; ftHandle:Pointer ) : integer ; > Niestety, dalej to samo :(
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: krolikbest
Date: Sat, 10 Dec 2016 18:36
Date: Sat, 10 Dec 2016 18:36
73 lines
3439 bytes
3439 bytes
W dniu 2016-12-09 o 11:17, stchebel@gmail.com pisze:
> Witam,
> Jeszcze raz dzięki za sugestie w siostrzanych wątkach Lazarus/RPi/DLL/FTDI..
> Zgodnie z Waszymi sugestiami zrobiłem programik na RPi. Jak zwykle forma, na niej Button i Label. Cały program wygląda tak:
>
> unit Unit1;
>
> {$mode objfpc}{$H+}
>
> interface
>
> uses
> Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,Messages
> ,ComCtrls,Variants,DynLibs;
>
> type
>
> { TForm1 }
>
> TForm1 = class(TForm)
> Button1: TButton;
> Label1: TLabel;
> procedure Button1Click(Sender: TObject);
> procedure FormCreate(Sender: TObject);
> private
> { private declarations }
> public
> { public declarations }
> end;
>
> var
> Form1: TForm1;
> FT_HANDLE: Dword=0;
> ftresult: integer;
> DLL_Handle:THandle;
> FT_Open_Fun:function (PVDevice:Integer; ftHandle:Pointer ) : integer ; stdcall ;
> implementation
>
> {$R *.lfm}
>
> { TForm1 }
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> if Assigned(FT_Open_Fun) then
> ftresult:=FT_Open_Fun(0,@FT_HANDLE)
> else
> ShowMessage('Dupa blada');
> Label1.Caption:=IntToStr(ftresult);
>
> end;
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> DLL_Handle:=LoadLibrary('/home/pi/Lazarus_Projects/Open_Port/lib/arm-linux/libftd2xx.so.1.3.6');
> Pointer(FT_Open_Fun):=GetProcAddress(DLL_Handle,'FT_Open');
> end;
>
> end.
>
> Program działa, ale niestety zwraca mi nieprawidłową wartość z funkcji FT_Open_Fun (skojarzona z funkcją FT_Open z biblioteki). Zwraca mi wartość 2, co jest kodem błędu FT_DEVICE_NOT_FOUND.Powinno zwrócić wartość 0. Pierwsze co pomyślałem,to jest jakiś problem z moim HW. Nic podobnego, odpalam program z examples/EEPROM/read (załączony do bibliotek FTDI) i wszystko jest OK. Elegancko otwiera port i prawidłowo odczytuje zawartość EEPROM'a. Biblioteki do RPi pobieram stąd:
>
> http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx-arm-v6-hf-1.3.6.tgz
>
> Jest tam trochę opisów jak to zainstalować i takie tam..
>
> Macie Koledzy jakiś pomysł?
>
>
A z jakimi uprawnieniami to robisz? Zalecam root (na użytkowniku pi mam
wiele ograniczeń co do np. dostępności do GPIO). Lazarusa jak
uruchamiasz, bo ja sudo starlazarus z basha. Biblioteke jak instalowałeś
jako root czy pi czy jeszcze coś innego?
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Mon, 12 Dec 2016 01:07
Date: Mon, 12 Dec 2016 01:07
11 lines
2266 bytes
2266 bytes
W dniu sobota, 10 grudnia 2016 19:36:26 UTC+1 użytkownik krolikbest napisał: > A z jakimi uprawnieniami to robisz? Zalecam root (na użytkowniku pi mam > wiele ograniczeń co do np. dostępności do GPIO). Lazarusa jak > uruchamiasz, bo ja sudo starlazarus z basha. Biblioteke jak instalowałeś > jako root czy pi czy jeszcze coś innego? Bingo!! Uruchomiłem lazarusa przez sudo startlazarus z konsoli i nagle wszystko zaczęło działać tak jak trzeba. Szczerze powiedziawszy jestem zupełnie "świeży" w Linux'sie i pytania co do uprawnień z jakimi to robię, to hmmm... Żebym to ja wiedział co to są te uprawnienia :)) A tak przy okazji, co polecasz do poczytania w zakresie podstaw Linux'a? Bez fajerwerków, to co najpotrzebniejsze. Przynajmniej chciałbym wiedzieć dlaczego przy takim uruchomieniu Lazarusa moje problemy odeszły w siną dal.. Dzięki za pomoc!!
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: konsul41
Date: Mon, 12 Dec 2016 07:23
Date: Mon, 12 Dec 2016 07:23
22 lines
2452 bytes
2452 bytes
W dniu 12-12-2016 o 02:07, stchebel@gmail.com pisze: > W dniu sobota, 10 grudnia 2016 19:36:26 UTC+1 użytkownik krolikbest napisał: > >> A z jakimi uprawnieniami to robisz? Zalecam root (na użytkowniku pi mam >> wiele ograniczeń co do np. dostępności do GPIO). Lazarusa jak >> uruchamiasz, bo ja sudo starlazarus z basha. Biblioteke jak instalowałeś >> jako root czy pi czy jeszcze coś innego? > > Bingo!! Uruchomiłem lazarusa przez sudo startlazarus z konsoli i nagle wszystko zaczęło działać tak jak trzeba. Szczerze powiedziawszy jestem zupełnie "świeży" w Linux'sie i pytania co do uprawnień z jakimi to robię, to hmmm... Żebym to ja wiedział co to są te uprawnienia :)) A tak przy okazji, co polecasz do poczytania w zakresie podstaw Linux'a? Bez fajerwerków, to co najpotrzebniejsze. > Przynajmniej chciałbym wiedzieć dlaczego przy takim uruchomieniu Lazarusa moje problemy odeszły w siną dal.. > > Dzięki za pomoc!! > Najtaniej to internet, zacznij od słów "linux uprawnienia" następnie man, info, doc, howto do programów których używasz potem źódła tych programów, na koniec Linux Kernel ;-D Co do ładowania dll nadal nie sprawdzasz, twój wybór. --- Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast. https://www.avast.com/antivirus
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Mon, 12 Dec 2016 11:34
Date: Mon, 12 Dec 2016 11:34
28 lines
2986 bytes
2986 bytes
W dniu poniedziałek, 12 grudnia 2016 08:23:42 UTC+1 użytkownik kons...@wp.pl napisał:
> W dniu 12-12-2016 o 02:07, stchebel@gmail.com pisze:
> > W dniu sobota, 10 grudnia 2016 19:36:26 UTC+1 użytkownik krolikbest napisał:
> >
> >> A z jakimi uprawnieniami to robisz? Zalecam root (na użytkowniku pi mam
> >> wiele ograniczeń co do np. dostępności do GPIO). Lazarusa jak
> >> uruchamiasz, bo ja sudo starlazarus z basha. Biblioteke jak instalowałeś
> >> jako root czy pi czy jeszcze coś innego?
> >
> > Bingo!! Uruchomiłem lazarusa przez sudo startlazarus z konsoli i nagle wszystko zaczęło działać tak jak trzeba. Szczerze powiedziawszy jestem zupełnie "świeży" w Linux'sie i pytania co do uprawnień z jakimi to robię, to hmmm... Żebym to ja wiedział co to są te uprawnienia :)) A tak przy okazji, co polecasz do poczytania w zakresie podstaw Linux'a? Bez fajerwerków, to co najpotrzebniejsze.
> > Przynajmniej chciałbym wiedzieć dlaczego przy takim uruchomieniu Lazarusa moje problemy odeszły w siną dal..
> >
> > Dzięki za pomoc!!
> >
> Najtaniej to internet, zacznij od słów "linux uprawnienia"
> następnie man, info, doc, howto do programów których używasz potem źódła
> tych programów, na koniec Linux Kernel ;-D
>
> Co do ładowania dll nadal nie sprawdzasz, twój wybór.
>
> ---
Jak to nie?
if Assigned(FT_Open_Fun) then
ftresult:=FT_Open_Fun(0,@FT_HANDLE)
else
ShowMessage('Dupa blada');
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: Stregor
Date: Mon, 12 Dec 2016 12:23
Date: Mon, 12 Dec 2016 12:23
7 lines
1535 bytes
1535 bytes
> Jak to nie? Nie sprawdzasz wyniku funkcji LoadLibrary -- Pozdrawiam, Stregor
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Tue, 13 Dec 2016 05:31
Date: Tue, 13 Dec 2016 05:31
8 lines
1845 bytes
1845 bytes
W dniu poniedziałek, 12 grudnia 2016 13:23:35 UTC+1 użytkownik Stregor napisał:
> > Jak to nie?
>
> Nie sprawdzasz wyniku funkcji LoadLibrary
>
> --
Ano fakt. Z tego co doczytałem się w helpie D6, wystarczy sprawdzić, czy LoadLibrary('CośTam')<>0, ale pewien nie jestem. Zgadza się?
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Tue, 13 Dec 2016 05:36
Date: Tue, 13 Dec 2016 05:36
11 lines
2226 bytes
2226 bytes
W dniu wtorek, 13 grudnia 2016 06:31:16 UTC+1 użytkownik stch...@gmail.com napisał:
> W dniu poniedziałek, 12 grudnia 2016 13:23:35 UTC+1 użytkownik Stregor napisał:
> > > Jak to nie?
> >
> > Nie sprawdzasz wyniku funkcji LoadLibrary
> >
> > --
>
> Ano fakt. Z tego co doczytałem się w helpie D6, wystarczy sprawdzić, czy LoadLibrary('CośTam')<>0, ale pewien nie jestem. Zgadza się?
Aha!! Eksperymenty zdają się potwierdzać powyższe twierdzenie, ale na 100% nie jestem tego pewien.
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Tue, 13 Dec 2016 06:41
Date: Tue, 13 Dec 2016 06:41
11 lines
1886 bytes
1886 bytes
W dniu poniedziałek, 12 grudnia 2016 08:23:42 UTC+1 użytkownik kons...@wp.pl napisał: > > Najtaniej to internet, zacznij od słów "linux uprawnienia" > następnie man, info, doc, howto do programów których używasz potem źódła > tych programów, na koniec Linux Kernel ;-D > Tyle to i ja wiem. Internetem byle dziecko umie się posługiwać i googlać. Pytanie było konkretne: Co polecasz? Rozumiesz ?!
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: konsul41
Date: Tue, 13 Dec 2016 08:39
Date: Tue, 13 Dec 2016 08:39
24 lines
2050 bytes
2050 bytes
W dniu 13-12-2016 o 07:41, stchebel@gmail.com pisze: > W dniu poniedziałek, 12 grudnia 2016 08:23:42 UTC+1 użytkownik kons...@wp.pl napisał: > > >> >> Najtaniej to internet, zacznij od słów "linux uprawnienia" >> następnie man, info, doc, howto do programów których używasz potem źódła >> tych programów, na koniec Linux Kernel ;-D >> > > Tyle to i ja wiem. Internetem byle dziecko umie się posługiwać i googlać. > Pytanie było konkretne: Co polecasz? Rozumiesz ?! > Widocznie nie wiesz, przecież to podstawa. Rozumiesz?! Co Ci polecić? Linux. Sterowniki urządzeń. Alessandro Rubini I tak to na początek Góra Lodowa. wpisz w powłoce man sudo i zacznij po prostu czytać! --- Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast. https://www.avast.com/antivirus
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: Stregor
Date: Tue, 13 Dec 2016 08:49
Date: Tue, 13 Dec 2016 08:49
15 lines
1993 bytes
1993 bytes
>> Ano fakt. Z tego co doczytałem się w helpie D6, wystarczy sprawdzić, czy LoadLibrary('CośTam')<>0, ale pewien nie jestem. Zgadza się?
>
> Aha!! Eksperymenty zdają się potwierdzać powyższe twierdzenie, ale na 100% nie jestem tego pewien.
Zgadza się. Zero to wtopa.
https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms684175(v=vs.85).aspx
Gdy LoadLibrary da zero, możesz użyć funkcji GetLastError żeby sprawdzić
co się stało. Bo niekoniecznie może nie być pliku, może na przykład być
za mało pamięci na załadowanie biblioteki.
--
Pozdrawiam,
Stregor
Re: Jeszcze raz DLL, tym razem tylko na RPi
Author: stchebel
Date: Tue, 13 Dec 2016 13:05
Date: Tue, 13 Dec 2016 13:05
27 lines
2753 bytes
2753 bytes
W dniu wtorek, 13 grudnia 2016 09:39:16 UTC+1 użytkownik kons...@wp.pl napisał: > W dniu 13-12-2016 o 07:41, stchebel@gmail.com pisze: > > W dniu poniedziałek, 12 grudnia 2016 08:23:42 UTC+1 użytkownik kons...@wp.pl napisał: > > > > > >> > >> Najtaniej to internet, zacznij od słów "linux uprawnienia" > >> następnie man, info, doc, howto do programów których używasz potem źódła > >> tych programów, na koniec Linux Kernel ;-D > >> > > > > Tyle to i ja wiem. Internetem byle dziecko umie się posługiwać i googlać. > > Pytanie było konkretne: Co polecasz? Rozumiesz ?! > > > Widocznie nie wiesz, przecież to podstawa. Rozumiesz?! > > Co Ci polecić? > Linux. Sterowniki urządzeń. Alessandro Rubini > I tak to na początek Góra Lodowa. > > wpisz w powłoce man sudo i zacznij po prostu czytać! > > --- > Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast. > https://www.avast.com/antivirus Ano jasne, że trzeba się dokształcić w nowym środowisku OS. Tymczasem wracając do tematu głównego wątka, merytoryczna odpowiedź i zresztą rozwiązująca problem została udzielona tylko przez Kolegę Królika_The_Besta.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads