[gelöst] Aufruf Function geht schief

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] Aufruf Function geht schief

Beitrag von juelin »

Hallo,
nun habe ich nach viel Arbeit die nötigen Files für mein Programm
zum Steuern eines SDR erstellt.
librtlsdr.dll und rtl_sdr.pas siehe Anhang librtlsdr.zip.
In meinem Programm rufe ich im Ereignis FormActivate
die Funktion rtl_sdr.rtlsdr_get_device_count aus rtl_sdr.pas auf.

Code: Alles auswählen

procedure TForm1.FormActivate(Sender: TObject);
  var h1: Tuint32_t;
begin  
  h1:=rtl_sdr.rtlsdr_get_device_count;
end;  
Wenn ich das Programm starte bekomme ich Fehler (siehe bild1).
Wenn ich den Befehl h1:=rtl_sdr.rtlsdr_get_device_count; auskommentiere läuft das Programm.
Was mache ich falsch?
Danke für die Hilfe und Gruß
Jürgen
Dateianhänge
bild1.jpg
bild1.jpg (15.09 KiB) 908 mal betrachtet
librtlsdr.zip
(65.28 KiB) 25-mal heruntergeladen
Zuletzt geändert von juelin am Di 10. Jun 2025, 20:30, insgesamt 1-mal geändert.

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Aufruf Function geht schief

Beitrag von Zvoni »

und du bist dir sicher, dass die "librtlsdr.dll" auch als cdecl erstellt worden ist?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Aufruf Function geht schief

Beitrag von juelin »

Hallo zvoni,
nein weiss ich nicht ob die dll cdecl ist.
Aber ich hatte ja die dll als anhang dabei.
Mir sagt der Begriff cdecl nix.
Danke und Gruß
Jürgen

Benutzeravatar
theo
Beiträge: 10916
Registriert: Mo 11. Sep 2006, 19:01

Re: Aufruf Function geht schief

Beitrag von theo »

juelin hat geschrieben: Di 10. Jun 2025, 11:22 Mir sagt der Begriff cdecl nix.
Das kann man ändern. :wink:
https://de.wikipedia.org/wiki/Aufrufkonvention

https://wiki.freepascal.org/Stdcall/de
https://wiki.freepascal.org/Cdecl/de

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Aufruf Function geht schief

Beitrag von Zvoni »

hmm.... hab mir gerade den C-Quellcode von librtlsdr angeschaut.
Sehe da eigentlich nix verdächtiges. (und ich denke, dass die lib mit cdecl erstellt ist. Hab in den Headern nix gefunden was in eine andere Richtung deutet)

Code: Alles auswählen

uint32_t rtlsdr_get_device_count(void)
{
	int i;
	libusb_context *ctx;
	libusb_device **list;
	uint32_t device_count = 0;
	struct libusb_device_descriptor dd;
	ssize_t cnt;

	libusb_init(&ctx);

	cnt = libusb_get_device_list(ctx, &list);

	for (i = 0; i < cnt; i++) {
		libusb_get_device_descriptor(list[i], &dd);

		if (find_known_device(dd.idVendor, dd.idProduct))
			device_count++;
	}

	libusb_free_device_list(list, 1);

	libusb_exit(ctx);

	return device_count;
}
Heisst: Der Aufruf schlägt bereits fehl.

Welches Lazarus/FPC nutzt du?

EDIT: Wird die lib überhaupt gefunden? Wo liegt die dll?
Funktioniert LoadLibrary?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Aufruf Function geht schief

Beitrag von juelin »

ich nutze Lazarus 3.8 mit FPC 3.2.2
auf Windows 11 64 Bit

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Aufruf Function geht schief

Beitrag von Zvoni »

juelin hat geschrieben: Di 10. Jun 2025, 14:09 ich nutze Lazarus 3.8 mit FPC 3.2.2
auf Windows 11 64 Bit
Und wo liegt die dll?
hat die dll die richtige Target-Bitness?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Aufruf Function geht schief

Beitrag von juelin »

Hi,
so ich habe mal das komplete Source-Projekt
mit allen Fies gezipt.
Ich hoffe das hilft weiter.
Da braucht man natürlich einen RTL2832SDR sonst bringt es nix.
PS: Habe in Packages den H2PasWizard installiert.
Gruß
Jürgen
Dateianhänge
adsb.zip
(301.72 KiB) 81-mal heruntergeladen

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Aufruf Function geht schief

Beitrag von Zvoni »

Sehe gerade was "skurriles" (zumindest nicht vorher so gesehen)
Unbenannt.PNG
Unbenannt.PNG (16.23 KiB) 766 mal betrachtet
Herkunft "Unix" mit Änderungsdatum 08.06.2025

Hast du die DLL selbst kompiliert? Womöglich auf einem Linux-System?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6845
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Aufruf Function geht schief

Beitrag von af0815 »

The “0xc00007b/0xc000007b” error occurs whenever a user attempts to run a game/software and Windows does not find the necessary relevant files. Moreover, it can also occur when you attempt to run a 32-bit game/software on a 64-bit supported platform.
Infos vom CFF Explorer: Die librtlsdr.dll ist eine "Portable Executable 32" und hat in den Abhängigkeiten eine libgcc_s_sjlj-1.dll und die lib-usb-1.0.dll . Die anderen Abhängigkeiten sind am Windows System vorhanden.
Das heisst es funktioniert nur auf 32 Bit und die fehlenden dll's müssen auch herbeigeschaft werden (in 32 Bit)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6952
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Aufruf Function geht schief

Beitrag von Mathias »

Hallo,
nun habe ich nach viel Arbeit die nötigen Files für mein Programm
zum Steuern eines SDR erstellt.
librtlsdr.dll und rtl_sdr.pas siehe Anhang librtlsdr.zip.
In meinem Programm rufe ich im Ereignis FormActivate
die Funktion rtl_sdr.rtlsdr_get_device_count aus rtl_sdr.pas auf.
Ich habe deine DLL geprüft, scheint eine 32Bit zu sein.
Versuche mal dein Programm auf Win 32Bit zu kompilieren.

Du sagtest mal, du hast ein Fremdprogramm, welches , mit deinem SDR läuft.
Also müssen alle benötigten DLL bei dir das sein.

Code: Alles auswählen

file librtlsdr.dll
librtlsdr.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows, 17 sections
Nachtrag:
Da bekommt man die 64Bit DLL: https://github.com/librtlsdr/librtlsdr/releases
Aber die USB-DLL musst du selbst organisieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: [gelöst] Aufruf Function geht schief

Beitrag von juelin »

ja danke Mathias,
genau das war es.
Meine DLL war 32Bit.
Ich habe aber einen 64Bit Rechner.
Also habe ich die DLL von deinem Link runter geladen
und schon lief es.
Also nochmal an alle danke.
Gruß
Jürgen

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: [gelöst] Aufruf Function geht schief

Beitrag von Zvoni »

juelin hat geschrieben: Di 10. Jun 2025, 20:32 Meine DLL war 32Bit.
Ich habe aber einen 64Bit Rechner.
*seufz*
Dass dein Rechner ein 64-Bit Betriebssystem hat ist absolut egal.......
hat die dll die richtige Target-Bitness?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten