Hallo pfid,
Genau.
Alle (insgesammt sind es vier) Fenster sind QT Projekte (falls das eine Rolle spielt - ich denke jedoch nicht).
Ein Beispiel wäre folgendes Szenario:
Programm 1 bekommt von der Datastation gesagt dass die Serversockets gestartet wurden.
Nun teilt Programm 1 dem Programm 2 mittels PostMessage mit, dass die Serversockets der Datastation bereit sind. Programm 2 verbindet nun mit den Serversockets.
Eine Möglichkeit das Ganze OS-unabhängig zu gestalten wäre natürlich - wie du bereits erwähnt hast - dass ich alles mittels weiteren Sockets realisiere.
Aber ist dieser doch Grosse Aufwand wirklich nötig?
Da die 4 Programme nur unter Windows & Unix laufen werden könnte ich auch kurzerhand ein #ifdef _WIN32 einfügen und so OS spezifischen Code programmieren.
Was ich mich allerdings immernoch frage ist, warum der WinApi Befehl sofort ein SIGSEV Error auslöst.
Dies ist aber nicht generell bei WinApi Befehlen so (::Beep(UINT, UINT)) funktioniert.
¤:
Das Ganze sieht übrigens so aus:
Mainwindow.h
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <windows.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
Mainwindow.cpp
Code: Alles auswählen
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
HWND hwnd = NULL;
hwnd = FindWindow(NULL, "ISSsrver");
}
Das komische daran ist ja, dass der SIGSEV Fehler nicht beim klicken auf den Button passiert, sondern bevor die GUI angezeigt wird.
Kommentiere ich die entsprechende Stelle (hwnd = FindWindow(NULL, "ISSsrver");) übrigens aus, läuft das Programm wie geschmiert.
- Dane