MFC und WindowsForms



  • Hallo,

    im Rahmen meiner Doktorarbeit (Elektrotechnik) muss ich elektrische Energieversorgungsnetze im Netzsimulationsprogramm NEPLAN simulieren. Um den Prozess zu automatisieren, möchte ich die von NEPLAN bereitgestellten Bibliotheken nutzen. Dazu erstelle ich (wie in dem Handbuch beschrieben) ein MFC-DLL-Projekt in MS Visual Studio 2012. Der Zugriff über das erhaltene DLL-File funktioniert auch einwandfrei.

    Nun ist es jedoch notwendig, dem Benutzer eine grafische Benutzeroberfläche bieten zu können, bei der er entscheiden kann, welche Pfade für Netzdaten und Berechnungsergebnisse verwendet werden sollen.
    Dabei habe ich als Nicht-Informatiker große Probleme. Mittlerweile habe ich viele verschiedene Wege ausprobiert (unter anderem Bücher,Google,...), ohne jedoch zu einer Lösung des Problems zu gelangen.

    Mein Wunsch ist, dass beim "Start" der DLL (wird in NEPLAN gestartet) ein GUI sich öffnet und ich darüber die gewünschten Operationen vornehmen kann (z.B. Start der Rechnung, Eingabe des Eingangsdateipfades,...).

    Ich wäre sehr dankbar für eure Hilfe, da ich im Moment überhaupt nicht weiterkomme und ich bisher leider nur mit Standard-C++-Konsolenprogrammen gearbeitet habe.

    Dominik

    // NPLTEST.cpp : Definiert die Initialisierungsroutinen für die DLL.
    //
    
    #include "stdafx.h"
    #include "NPLTEST.h"
    #include "NeplanProgrammingLibrary.H"
    #include "windows.h"
    #include "afxwin.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // CNPLTESTApp
    
    BEGIN_MESSAGE_MAP(CNPLTESTApp, CWinApp)
    END_MESSAGE_MAP()
    
    // CNPLTESTApp-Erstellung
    
    CNPLTESTApp::CNPLTESTApp()
    {
    	// TODO: Hier Code zur Konstruktion einfügen.
    	// Alle wichtigen Initialisierungen in InitInstance positionieren.
    }
    
    // Das einzige CNPLTESTApp-Objekt
    
    CNPLTESTApp theApp;
    
    // CNPLTESTApp-Initialisierung
    
    BOOL CNPLTESTApp::InitInstance()
    {
    	CWinApp::InitInstance();
    
    	return TRUE;
    }
    
    BOOL bShowMessageBox = TRUE;
    void ShowMessageBox(CString message)
    {
      if (bShowMessageBox)
        AfxMessageBox(message);
    }
    
    void WriteMessageToReportFile(CString message)
    {
     	TCHAR cMessageText[300];
      swprintf_s(cMessageText, _T("%s"), message);
      WriteMessageToLogFile(cMessageText);
    }
    
    //////////////////////////////////
    // RunNeplanScript is the
    // main entry to run dll                --> Dies ist der Einstiegspunkt der DLL?
    //////////////////////////////////
    NPL_NPLTEST_API BOOL RunNeplanScript()
    {
    BOOL bRunOk = TRUE;
    //define here your NEPLAN application
    
    // Get the element ID of a line from the project
    // using the NEPLAN library function “GetElementByName”
    unsigned long ElementID=0;
    CString strID;
    unsigned long Node1;
    
    GetElementByName(_T("LINE"),_T("L-1503838"), ElementID);
    
    strID.Format(_T("%d"), ElementID); 
    
    AfxMessageBox(strID);
    
    RunAnalysisLF();
    
    GetNodeFromElement(Node1,ElementID, 1);
    
    SwitchElementAtNode(ElementID, Node1, FALSE);
    
    ShowReport();
    
    return bRunOk;
    }
    


  • Als Doktor der E-Technik kann man vöölig am Programmieren vorbeischrammen? Ich hab nur ein Diplom und hatte das schon sehr intensiv in meiner Ausbildung. Aber nun zum Thema. Ich arbeite zwar nicht mit Windows Forms aber die MFC ist ja quasi schon ein Framework, was eine GUI abbildet. Warum sollte man dann Windows Forms nutzen? Erstelle ein MFC-Projekt (SDI oder dialogbasiert) und binde die DDLs mit ein. Dann kannst du dir deine Oberfläche wie du möchtest gestalten. Wenn du nur so eine Art Wizard für Einstellungen brauchst, dann dürfte eine dialogbasierte Anwendung oder eine SDi-Anwendung ggf. mit CFormView als Ansichtsklasse genügen.



  • Danke für die Antwort,

    mein Problem ist, dass das Programm NEPLAN nur EINE EINZIGE DLL mit den auszuführenden Anweisungen öffnen kann. Dabei greift es stets auf die Funktion "NPL_NPLTEST_API BOOL RunNeplanScript()" zurück. Ändern kann ich dies leider nicht, da diese Schnittstelle vorgegeben ist. Die Frage ist daher, wie ich (irgend)eine Benutzeroberfläche generiere, mit Hilfe derer der Benutzer Angaben zur Berechnung machen kann.
    Leider habe ich als Energietechniker während meines Studiums nur Konsolenanwendungen in C und C++ bzw. sehr viel in Matlab programmiert. Entschuldigt daher meine Unwissenheit...


  • Mod

    Und wo liegt das Problem, wenn eben nur eine DLL geladen werden kann.
    Es spricht doch nicts dagegen, dass diee DLL andere DLLs benutzt 😉



  • Engineer86 schrieb:

    Entschuldigt daher meine Unwissenheit...

    Musst dich nicht entschuldigen, dafür gibt's ja das Forum. Allerdings verstehe ich dein genaues Problem auch nicht ganz. Willst du dich jetzt mit deinem noch zu entwicklenden Programm auf Neplan draufsetzen oder soll mit dem Programm nur eine Art Einstellungsdatei generiert werden, die dann Neplan liest und entsprechend der Vorgaben was macht. Da ich das Programm nicht kenne weiß ich jetzt nicht, wo du genau ansetzen willst/musst.



  • Engineer86 schrieb:

    Hallo,

    im Rahmen meiner Doktorarbeit (Elektrotechnik) muss ich elektrische Energieversorgungsnetze im Netzsimulationsprogramm NEPLAN simulieren. Um den Prozess zu automatisieren, möchte ich die von NEPLAN bereitgestellten Bibliotheken nutzen. Dazu erstelle ich (wie in dem Handbuch beschrieben) ein MFC-DLL-Projekt in MS Visual Studio 2012. Der Zugriff über das erhaltene DLL-File funktioniert auch einwandfrei.

    Nun ist es jedoch notwendig, dem Benutzer eine grafische Benutzeroberfläche bieten zu können, bei der er entscheiden kann, welche Pfade für Netzdaten und Berechnungsergebnisse verwendet werden sollen.
    Dabei habe ich als Nicht-Informatiker große Probleme. Mittlerweile habe ich viele verschiedene Wege ausprobiert (unter anderem Bücher,Google,...), ohne jedoch zu einer Lösung des Problems zu gelangen.

    Mein Wunsch ist, dass beim "Start" der DLL (wird in NEPLAN gestartet) ein GUI sich öffnet und ich darüber die gewünschten Operationen vornehmen kann (z.B. Start der Rechnung, Eingabe des Eingangsdateipfades,...).

    Ich wäre sehr dankbar für eure Hilfe, da ich im Moment überhaupt nicht weiterkomme und ich bisher leider nur mit Standard-C++-Konsolenprogrammen gearbeitet habe.

    Dominik

    #include "NeplanProgrammingLibrary.H"
    

    Hallo,

    Da ich mit mit der Neplan Programming Library beschäftigen muss, wollte ich fragen wie du einen Zugriff zu den zugehörigen Header-Files bekommen hast?


Anmelden zum Antworten