🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#345422
Author: stchebel
Date: Fri, 09 Dec 2016 10:17
67 lines
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
#345423
Author: Piotr S.
Date: Fri, 09 Dec 2016 11:35
20 lines
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
#345424
Author: stchebel
Date: Fri, 09 Dec 2016 11:52
9 lines
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
#345425
Author: Piotr S.
Date: Fri, 09 Dec 2016 11:58
13 lines
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
#345426
Author: stchebel
Date: Fri, 09 Dec 2016 12:13
13 lines
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
#345427
Author: krolikbest
Date: Sat, 10 Dec 2016 18:36
73 lines
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
#345428
Author: stchebel
Date: Mon, 12 Dec 2016 01:07
11 lines
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
#345429
Author: konsul41
Date: Mon, 12 Dec 2016 07:23
22 lines
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
#345430
Author: stchebel
Date: Mon, 12 Dec 2016 11:34
28 lines
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
#345431
Author: Stregor
Date: Mon, 12 Dec 2016 12:23
7 lines
1535 bytes
> Jak to nie?

Nie sprawdzasz wyniku funkcji LoadLibrary

-- 
Pozdrawiam,
Stregor
Re: Jeszcze raz DLL, tym razem tylko na RPi
#345432
Author: stchebel
Date: Tue, 13 Dec 2016 05:31
8 lines
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
#345433
Author: stchebel
Date: Tue, 13 Dec 2016 05:36
11 lines
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
#345435
Author: stchebel
Date: Tue, 13 Dec 2016 06:41
11 lines
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
#345436
Author: konsul41
Date: Tue, 13 Dec 2016 08:39
24 lines
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
#345434
Author: Stregor
Date: Tue, 13 Dec 2016 08:49
15 lines
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
#345437
Author: stchebel
Date: Tue, 13 Dec 2016 13:05
27 lines
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