![]() |
Projekt hat exception-klasse external:sigsev ausgelöst
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; |
AW: Projekt hat exception-klasse external:sigsev ausgelöst
Willkommen hier...:dp:
Zum Thema kann ich nur raten weil ich die FPC Komponente nicht kenne... Aber:
Delphi-Quellcode:
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.
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 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. :zwinker: |
AW: Projekt hat exception-klasse external:sigsev ausgelöst
Zitat:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin ComboBoxPorts.Items.CommaText := GetSerialPortNames; connected := False; end; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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