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

Projekt hat exception-klasse external:sigsev ausgelöst

Offene Frage von "jaenicke"
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 2. Feb 2025, 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:
Delphi-Quellcode:
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); // :!::!::!: [COLOR="Lime"]hier sitzt das Problem[/COLOR]
      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;

Geändert von TBx ( 3. Feb 2025 um 09:13 Uhr) Grund: Delphi-Tags eingegügt
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

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

  Alt 2. Feb 2025, 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 ( 2. Feb 2025 um 15:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.777 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 2. Feb 2025, 22:00
Delphi-Quellcode:
[..]
  // Liste der verfügbaren seriellen Ports abrufen
  portNames := getSerialPortNames;
  port := '';
  for i := 1 to Length(portNames) do
  begin
    if portNames[i] = ',then
[..]
Meinst du vielleicht das?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBoxPorts.Items.CommaText := GetSerialPortNames;
  connected := False;
end;
PS: wo ist getSerialPortNames deklariert und implementiert?
Das ist in Lazarus bzw. Synapse eine Funktion aus der Unit synaser, die er auch eingebunden hat.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:31 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