Clipbrd wird nicht gefunden/Führt zu Access Error
Clipbrd wird nicht gefunden/Führt zu Access Error
Das kleine "Progrämmchen"
{$mode objfpc}{$H+}
uses
Clipbrd;
begin
ClipBoard.AsText := 'Test Clipboard';
end.
führt in der Lazarus IDE (Version 3.6-FPC 3.2.2, x64,Windows11, x64) zu einer
"External Access Violation reading from address $0000000000000000"
In der Datei LCLINTF.INC, Zeile 96.
Auf der Kommandozeile mit FPC bekomme ich
"project1.lpr(4,3) Fatal: Can't find unit Clipbrd used by Program
Fatal: Compilation aborted
Error: C:\lazarus\fpc\3.2.2\bin\x86_64-win64\ppcx64.exe returned an error exitcode"
Ein anderes Programm von mir, eine GUI-Anwendung, hat u.a. auch Clipbrd in der Uses-Klausel.
Hier tritt obiges Problem nicht auf.
Hilfe, bitte!
{$mode objfpc}{$H+}
uses
Clipbrd;
begin
ClipBoard.AsText := 'Test Clipboard';
end.
führt in der Lazarus IDE (Version 3.6-FPC 3.2.2, x64,Windows11, x64) zu einer
"External Access Violation reading from address $0000000000000000"
In der Datei LCLINTF.INC, Zeile 96.
Auf der Kommandozeile mit FPC bekomme ich
"project1.lpr(4,3) Fatal: Can't find unit Clipbrd used by Program
Fatal: Compilation aborted
Error: C:\lazarus\fpc\3.2.2\bin\x86_64-win64\ppcx64.exe returned an error exitcode"
Ein anderes Programm von mir, eine GUI-Anwendung, hat u.a. auch Clipbrd in der Uses-Klausel.
Hier tritt obiges Problem nicht auf.
Hilfe, bitte!
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Konsolenanwendungen haben kein Clipboard.
Clipboard ist eine GUI Angelegenheit. Unter Linux ist X11 dafür verantwortlich (Oder ggf Wayland).
Ich weiss nicht, ob es da irgendwelche Tricks gibt, das zu umgehen.
Clipboard ist eine GUI Angelegenheit. Unter Linux ist X11 dafür verantwortlich (Oder ggf Wayland).
Ich weiss nicht, ob es da irgendwelche Tricks gibt, das zu umgehen.
-
- Beiträge: 6955
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Dies scheint nur in der LCL zu gehen.
Ich habe es mit Linux probiert, auch da knallt es.
Aber du kannst auch die WinAPI benutzen.
Ich habe es mit Linux probiert, auch da knallt es.
Aber du kannst auch die WinAPI benutzen.
Code: Alles auswählen
program project1;
uses
Windows;
// https://stackoverflow.com/questions/73322716/setclipboarddata-and-new-operator-for-handle
const
hello: string = 'Hello World !';
var
h: HGLOBAL;
pmem: pchar;
begin
h := GlobalAlloc(GMEM_MOVEABLE, Length(hello)+1);
if h <> 0 then begin
pmem := PChar(GlobalLock(h));
move(hello[1], pmem[0], Length(hello));
GlobalUnlock(h);
if OpenClipboard(0) then begin
EmptyClipboard;
if SetClipboardData(CF_TEXT, h) <> 0 then begin
h := 0;
end;
CloseClipboard;
end;
if h <> 0 then begin
GlobalFree(h);
end;
end;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6955
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Die gibt es. Da bei Windows immer die GUI bei Konsolenanwendungen läuft, kann man sich der WinAPI bedienen.Ich weiss nicht, ob es da irgendwelche Tricks gibt, das zu umgehen.
Bei Linux ist es ähnlich, aber da muss ein XServer im Hintergrund laufen. Das das ganze mit den XAtomen gesteuert wird.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Danke für den Tipp und den Code! So klappt es auch auf der Konsole mit der Zwischenablage unter Windows.Mathias hat geschrieben: Mo 21. Okt 2024, 18:03 Dies scheint nur in der LCL zu gehen.
Ich habe es mit Linux probiert, auch da knallt es.
Aber du kannst auch die WinAPI benutzen.
Code: Alles auswählen
program project1; uses Windows; // https://stackoverflow.com/questions/73322716/setclipboarddata-and-new-operator-for-handle const hello: string = 'Hello World !'; var h: HGLOBAL; pmem: pchar; begin h := GlobalAlloc(GMEM_MOVEABLE, Length(hello)+1); if h <> 0 then begin pmem := PChar(GlobalLock(h)); move(hello[1], pmem[0], Length(hello)); GlobalUnlock(h); if OpenClipboard(0) then begin EmptyClipboard; if SetClipboardData(CF_TEXT, h) <> 0 then begin h := 0; end; CloseClipboard; end; if h <> 0 then begin GlobalFree(h); end; end; end.
-
- Beiträge: 6955
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Das Gegenstück um Daten zu holen sollte jetzt mit diesem Anhaltspunkt kein Problem mehr sein.So klappt es auch auf der Konsole mit der Zwischenablage unter Windows.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Die Unit "clipbrd" liegt im Ordner "lcl" der Lazarus-Installation. Daher kannst du sie in einem Kommandozeilen-Programm nur verwenden, wenn du das Package LCL zu den Anforderungen des Projekts hinzufügst (Rechtsklick auf "Benötigte Packages" > "Hinzufügen", dann den Eintrag "LCL" aus der Liste auswählen). Nachdem das geschehen ist, geht es ganz einfach:
Die Unit "interfaces" wird noch benötigt, um das Widgetset zu initialisieren.
Code: Alles auswählen
program Project1;
uses
Interfaces, ClipBrd;
begin
Clipboard.AsText := 'Das ist ein Test für die Zwischenablage.';
end.
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Klasse! Dann braucht man die Windows API nicht. Ich werde es morgen ausprobieren.
Einstweilen Danke!
Einstweilen Danke!
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Am Ende hast du doch den ganzen GUI Zauber eingebunden.
Ich weiss nicht, ob ich das noch Konsolenanwendung nennen würde.
Aber ja, geht.
Ich weiss nicht, ob ich das noch Konsolenanwendung nennen würde.
Aber ja, geht.
- Niesi
- Lazarusforum e. V.
- Beiträge: 596
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Tja, das ist dann die virtuelle Klickiklicki-Emulation für die, die mit Klickibunti nicht klarkommen.theo hat geschrieben: Di 22. Okt 2024, 18:57 Am Ende hast du doch den ganzen GUI Zauber eingebunden.
Ich weiss nicht, ob ich das noch Konsolenanwendung nennen würde.
Aber ja, geht.
Schöne neue Welt ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Ja, es geht - in der IDE. Auf der Konsolenebene meckert FPC über die nicht gefundene Unit "Interfaces".
Außerdem, das so kompilierte Programm ist mit über 20MB wesentlich größer als die ein paar Dutzend Kilobyte großen Konsolenanwendungen. Klar, der Debugger...
Ich denke, ich bleibe bei der API.
Außerdem, das so kompilierte Programm ist mit über 20MB wesentlich größer als die ein paar Dutzend Kilobyte großen Konsolenanwendungen. Klar, der Debugger...
Ich denke, ich bleibe bei der API.
- Niesi
- Lazarusforum e. V.
- Beiträge: 596
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Dir ist bekannt, dass Du die vielen Megabyte für den Debugger weglassen kannst?Midykm hat geschrieben: Mi 23. Okt 2024, 18:32 Ja, es geht - in der IDE. Auf der Konsolenebene meckert FPC über die nicht gefundene Unit "Interfaces".
Außerdem, das so kompilierte Programm ist mit über 20MB wesentlich größer als die ein paar Dutzend Kilobyte großen Konsolenanwendungen. Klar, der Debugger...
Ich denke, ich bleibe bei der API.
Dann hast Du ein sehr kleines Programm, welches trotzdem funktioniert, sofern Du alles richtig gemacht hast ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
Re: Clipbrd wird nicht gefunden/Führt zu Access Error
Ja, ich weiß. Wie auch immer, ich arbeite lieber auf der Kommandozeile, sofern ich keine GUI-Anwendung mache. Und da motzt FPC über die fehlende Interfaces-Unit.
Egal. Das Problem "ClipBoard" ist so oder so gelöst, dank Eurer Hilfe!
Egal. Das Problem "ClipBoard" ist so oder so gelöst, dank Eurer Hilfe!