AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Projekt hat exception-klasse external:sigsev ausgelöst
Thema durchsuchen
Ansicht
Themen-Optionen

Projekt hat exception-klasse external:sigsev ausgelöst

Offene Frage von "haentschman"
Ein Thema von lilmnm · begonnen am 2. Feb 2025 · letzter Beitrag vom 2. Feb 2025
Antwort Antwort
lilmnm

Registriert seit: 2. Feb 2025
1 Beiträge
 
#1

Projekt hat exception-klasse external:sigsev ausgelöst

  Alt Heute, 12:39
Hallo liebe Community,

Ich bin gerade dabei ein Programm zu schreiben, welches einen Text an einen Ardunio über einen Com-Port weiterleitet. Jedoch bin ich auf den bereits in diesem Forum thematisierten SIGSEV-Fehler gestoßen (Zeile 65). Ich komme nicht weiter und würde mich über eine Antwort freuen. Hier der Code:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, Spin, synaser;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
ButtonConnect: TButton;
ButtonSend: TButton;
ComboBox1: TComboBox;
ComboBoxPorts: TComboBox;
Edit1: TEdit;
EditTextToSend: TEdit;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBoxConnection: TGroupBox;
GroupBoxSend: TGroupBox;
LabelTextToSend: TLabel;
Memo1: TMemo;
MemoLog: TMemo;
procedure ButtonConnectClick(Sender: TObject);
procedure ButtonSendClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;
connection1: TBlockSerial; // Globale Variable für die serielle Verbindung
connected: boolean; // Verbindungsstatus
port: string; // Gewählter Port

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
portNames: string;
i: integer;
begin
// Liste der verfügbaren seriellen Ports abrufen
portNames := getSerialPortNames;
port := '';
for i := 1 to Length(portNames) do
begin
if portNames[i] = ',' then
begin
ComboBoxPorts.Items.Add(port); // hier sitzt das Problem
port := '';
end
else
port := port + portNames[i];
end;
ComboBoxPorts.Items.Add(port);
ComboBoxPorts.Text := 'Wähle Port';
connected := False;
end;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
if connected then
begin
// Verbindung trennen
connection1.CloseSocket;
connection1.Free;
connected := False;
MemoLog.Lines.Add('Verbindung mit ' + port + ' getrennt.');
ButtonConnect.Caption := 'Verbinden';
ComboBoxPorts.Enabled := True;
end
else
begin
if ComboBoxPorts.ItemIndex <> -1 then
begin
port := ComboBoxPorts.Text;
// Verbindung erstellen
connection1 := TBlockSerial.Create;
connection1.Connect(port);
connection1.Config(9600, 8, 'N', SB1, False, False);
MemoLog.Lines.Add('Verbunden mit Port: ' + port);
connected := True;
ButtonConnect.Caption := 'Trennen';
ComboBoxPorts.Enabled := False;
end
else
ShowMessage('Bitte wählen Sie einen Port aus.');
end;
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
var
textToSend: string;
begin
if connected then
begin
textToSend := edit1.text;
if textToSend <> '' then
begin
// Text senden
connection1.SendString(textToSend + #13#10); // Senden mit Zeilenumbruch
MemoLog.Lines.Add('Gesendeter Text: ' + textToSend);
end
else
ShowMessage('Bitte geben Sie einen Text ein, der gesendet werden soll.');
end
else
ShowMessage('Es besteht keine Verbindung.');
end;

end.
end; ;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
if connected then
begin
// Verbindung trennen
connection1.CloseSocket;
connection1.Free;
connected := False;
MemoLog.Lines.Add('Verbindung mit ' + port + ' getrennt.');
ButtonConnect.Caption := 'Verbinden';
ComboBoxPorts.Enabled := True;
end
else
begin
if ComboBoxPorts.ItemIndex <> -1 then
begin
port := ComboBoxPorts.Text;
// Verbindung erstellen
connection1 := TBlockSerial.Create;
connection1.Connect(port);
connection1.Config(9600, 8, 'N', SB1, False, False);
MemoLog.Lines.Add('Verbunden mit Port: ' + port);
connected := True;
ButtonConnect.Caption := 'Trennen';
ComboBoxPorts.Enabled := False;
end
else
ShowMessage('Bitte wählen Sie einen Port aus.');
end;
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
var
textToSend: string;
begin
if connected then
begin
textToSend := edit1.text;
if textToSend <> '' then
begin
// Text senden
connection1.SendString(textToSend + #13#10); // Senden mit Zeilenumbruch
MemoLog.Lines.Add('Gesendeter Text: ' + textToSend);
end
else
ShowMessage('Bitte geben Sie einen Text ein, der gesendet werden soll.');
end
else
ShowMessage('Es besteht keine Verbindung.');
end;

end.
end;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.420 Beiträge
 
Delphi 12 Athens
 
#2

AW: Projekt hat exception-klasse external:sigsev ausgelöst

  Alt Heute, 15:17
Willkommen hier...

Zum Thema kann ich nur raten weil ich die FPC Komponente nicht kenne...

Aber:
Delphi-Quellcode:
portNames := getSerialPortNames;
port := '';
for i := 1 to Length(portNames) do
begin
  if portNames[i] = ',then
  begin
    ComboBoxPorts.Items.Add(port); // hier sitzt das Problem
    port := '';
  end
Du weist in der Schleife der port Variable vor dem .Add keinen Wert aus der Liste portNames zu. port ist immer ''. Das sollte den Fehler eigentlich nicht auslösen, es sei denn die ComboBox ist nicht initialisiert. (Hörensagen aus Google mit SIGSEV...) .Items.Add() kann mit '' umgehen.
Wie sieht denn der Inhalt von portNames aus?
PS: wo ist getSerialPortNames deklariert und implementiert?

PS: Bitte setze den Quellcode in die Delphi Tags. Der Knopf mit dem Delphi Helm im Editor.

Geändert von haentschman (Heute um 15:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz