Warum sind viele DLLs, die Windows zur Verfügung stellt, Bibliotheken, die nur von C / C++ gelesen werden können?

Ich probiere gerade alles mit statischen / dynamischen Bibliotheken zu verstehen (wir haben das in der Vorlesung nur kurz überflogen) und frage mich jetzt, warum die DLL-Dateien, die man auf Windows findet, überwiegend für C / C++ geschrieben sind.

Den Sinn hinter DLLs habe ich kapiert. Das sind im Prinzip Programmteile, auf die viele verschiedene Programme zugreifen können. Anstatt dass jedes Programm immer wieder seine Bibliotheken selbst mitbringt und dann lädt, kann man darüber eine Bibliothek von Windows aus laden und im Programm strenggenommen nur einen Pointer verwenden, um auf Funktionen der Fall zuzugreifen. Das spart dann eine Menge Speicherplatz.

Jedoch verstehe ich nicht so ganz, warum all diese Bibliotheken C- / C++-DLLs sind, die also ohne weiteres nur von diesen zwei Sprachen benutzt werden können. Ich habe jetzt schon viel gelesen, wo Leute z.B. in Java oder Python einige Windows-Bibliotheken (wie z.B. zipfldr.dll, was die Anweisung enthält, wie man in ZIP-Pakete, ohne sie zu entpacken, hineinschauen kann) nutzen wollten und das aber nur über Umwege funktioniert hat (wo im Übrigen auch C- / C++-Code benutzt werden musste).

Warum ist das so?

Ist das nicht ziemlich unpraktisch? Ich meine, dann müssten doch quasi alle Programme, die nicht in C oder C++ geschrieben wurden, entweder immer ihre eigenen DLLs beim Download mitbringen, was sehr speicherintensiv wäre oder man müsste, wenn man eine Windows-DLL z.B. in Java nutzen möchte, für jede Funktion, die man aus dieser nutzen wollte, sich in C eine Konvertierungsmöglichkeit zusammenbasteln. Und C / C++ wird zwar für viel Anwendungsprogrammierung verwendet, aber andere Sprachen sind doch weiter verbreitet, oder?

Ich hätte nur ein paar Ideen, warum das so ist:

  1. Windows wurde selbst zu großen Teilen in C(++) programmiert und bringt die DLL-Dateien nur mit, weil es die selber braucht.
  2. C(++) ist die bekanntere Sprache, die sehr hardwarenah noch vor Assembler funktioniert.
  3. C(++) wird mit Abstand am meisten für Anwendungsprogrammierung verwendet und die meisten Programme die man installiert sind somit in C(++) erstellt worden. Python z.B. nutzt man ja eher für Dinge wie KI oder Data Science, weil Python nicht so schnell ist.

Aber was ist der richtige Grund? Und gäbe es nicht eine Möglichkeit, dass alle Programme irgendwie auf die System-DLLs von Windows zugreifen könnten?

Computer, Technik, programmieren, Informatik, Technologie
Kennt einer von euch ein technisches Studienfach,welches AUCH für fleißige Mädels geeignet sein könnte,die nicht zu den hellsten Kerzen auf der Torte zählen,..?

… bzw. nur einen (Gesamt-) „IQ“ von 85 beispielsweise besitzen, jedoch eine längst abgeschlossene schulische Ausbildung aus einem eher technischen Bereich mit einem zusätzlichen vollen Abitur in der Tasche haben. Dieses Vollabi wurde jedoch angenommen aufgrund einer katastrophalen Erfahrung mit „Begabungsanalysen“ (bei EINER ganz bestimmten Studien- und Berufsberaterin) und der daraus entstandenen deutlich verschlechterten Arbeitshaltung sowie einer extrem unregelmäßigen Erledigung von Hausübungen mit einem eher schlechten 3er-Abi-Schnitt (2,9) leider erzielt… 🌩 🚫

Also… nochmal: 1.) Welches von „den“ technischen bzw. ingenieurwissenschaftlichen Studiengängen (Elektrotechnik, Bauingenieurwesen usw. usw.) würdet ihr einer vom rein Kognitiven her eher „dummen“ oder zumindest einer etwas weniger intelligenten Person am ehesten zutrauen? 2.) Und glaubt ihr außerdem, dass das Fach Elektrotechnik für einen „solchen“ Menschen einigermaßen machbar wäre, sobald dieser sich z.B. um ein Bestehen von Prüfungen generell extrem bemüht sowie ein mehr oder weniger großes Interesse für diesen Beruf entwickelt?

Computer, Arbeit, Beruf, Wissen, Lernen, Studium, Schule, Mathematik, Technik, Elektronik, IT, Menschen, programmieren, Noten, Berufswahl, Frauen, Talent, Gehirn, Kommunikation, Elektrotechnik, Wissenschaft, Intelligenz, Erfolg, Abitur, Bauingenieur, Bauingenieurwesen, Begabung, Fleiss, Informatik, Ingenieur, Ingenieurwesen, IQ, Logisches Denken, Schaltung, Theorie, Verständnis, Wille, Ziele, Fähigkeiten, Muehe, Ausbildung und Studium, Beruf und Büro
Wie kann Java auf ein User-Input warten?

Guten Tag,

ich programmiere gerade ein kleines Java-Projekt.

Dort hat bis jetzt auch alles geklappt, doch nun weiß ich nicht mehr weiter.

Ich habe für den Start meines Programms dieses GUI erzeugt:

Wie da ja schon steht, soll der User 'W' drücken, damit das Spiel anfängt. Doch ich weiß nicht, wie ich das programmieren kann. Ich habe schon eine Klasse (KeyHandler) angelegt, die KeyListener implementiert und die ich schon meinem Programm hinzugefügt habe, doch passieren tut dabei nichts.

Ich habe auch schon eine Ahnung warum: Die Variable 'commands.isRunning' wird direkt überprüft (und danach nicht mehr) und deshalb der If-Teil überschprungen. Wie kann jetzt Java auf einen User-Input warten, damit die Variable nicht sofort überprüft wird?

Hier ist meine Draw Klasse:

(commands.isRunning ist gerade noch false, soll aber durch das 'W' true werden. Die Methode, die dadurch aufgerufen werden soll, steht in der Klasse Commands)

public class Draw extends JPanel implements Variables {

    Commands commands = new Commands();
    KeyHandler keyHandler = new KeyHandler();

    Player player = new Player();
    Donut donut = new Donut();

    Draw() {
        this.addKeyListener(keyHandler);
        this.setPreferredSize(new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT));
        this.setBackground(Color.black);
        this.setFocusable(true);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        commands.printStartText(g);
        
        if (commands.isRunning() == true) {

            // Draw Grid
            for (int i = 0; i < SCREEN_HEIGHT / UNIT_SIZE; i++) {
                g.drawLine(i * UNIT_SIZE, 0, i * UNIT_SIZE, SCREEN_HEIGHT);
                g.drawLine(0, i * UNIT_SIZE, SCREEN_HEIGHT, i * UNIT_SIZE);
            }

            // Place Player
            player.placePlayer(g);

            // Place Donut
            donut.placeDonut(g);

            // Place Barrier

            // Place Gadget

            // Set Default Color
            g.setColor(Color.darkGray);

        }
    }
}

Und hier die KeyHandler Klasse:

public class KeyHandler implements KeyListener {

    Commands commands = new Commands();

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_W:
            commands.startGame();
            break;

        case KeyEvent.VK_A:

            break;
        case KeyEvent.VK_S:

            break;
        case KeyEvent.VK_D:

            break;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }
}

Auch habe ich schon 'System.in.read' hinter 'commands.printStartText(g);' platziert, doch da wurde dann nur ein weißes Bild angezeigt.

Ich hoffe ihr könnt mir helfen!

Schon mal vielen Dank im voraus.

Bild zum Beitrag
Computer, Technik, programmieren, Java, Informatik, GUI
Kann man mit einem Wirtschaftsinformatik-Studium immer noch Software-Entwickler werden?

Hi, ich habe letztens mit meinem Wirtschaftsinformatik-Studium begonnen und bin jetzt am Ende meines ersten Semesters. Grundsätzlich gefällt mir das Studium auch, nur ich merke ziemlich dass mir der Informatikteil deutlich mehr gefällt als der Wirtschaftsinformatik / BWL VWL Teil. Grundsätzlich ist die Verteilung zwischen Wirtschaft und Informatik ziemlich genau 50 50. Am Anfang deutlich mehr Wirtschaft / Grundlagenmodule, ab dem 3. Semester sind es 2 / 3 Informatikmodule (Algorithmen und Datenstrukturen, Datenbankensysteme usw).

Ich habe jetzt jedoch oft gehört, dass Wirtschaftsinformatiker am Ende viel mehr die Schnittstelle zwischen Informatik und BWL darstellen und zb häufig im IT Projektmanagement oder bei Anwendungssystemen wie SAP zu finden sind. Dass ein Wirtschaftsinformatiker am Ende ein Softwareentwickler ist soll eher selten vorkommen.

In dem Studienführer des Studiengangs der Universität steht zwar, dass Software-Engeneering auch zu den Berufsfeldern gehört die Wirtschaftsinformatiker ausüben können, jedoch habe ich von vielen Leuten mittlerweile etwas anderes gehört.

Demnach sei man in diesem Bereich strenggenommen ein "schlechterer Informatiker" und somit ein Schlechterer Softwareentwickler als jemand der reine Informatik studiert hat...

Auch die Verteilung der Fächer kommt mir irgendwie so vor, deutlich weniger Mathe als die Informatiker, keine Module wie technische oder theoretische Informatik, und dafür viele Grundlagendinge wie Rechnungswesen oder Mikroökonomik. Gerade in Leipzig ist die Verteilung eben sehr stark 50 50 und daher habe ich schon irgendwie das Gefühl dass mir wichtige Grundlagen für das Berufsfeld fehlen würden... Nicht zuletzt habe ich gerade mal ein einziges Programmiermodul in meinem Studiengang. Zwar dafür mit 3 mal die Woche am häufigsten, aber irgendwie trotzdem sehr begrenzt.

Also stimmt es, dass man als Wirtschaftsinformatiker in der Softwareentwicklung eigentlich nichts zu suchen hat, oder kann man auch als Wirtschaftsinformatiker Softwareentwickler werden ?

Und falls das so sein sollte, was sind die besten Möglichkeiten das ganze in die Richtung zu lenken ? Nochmal abbrechen und reine Informatik studieren ? Oder einen Master in Informatik hinterherschieben ? Sich weitere Programmiersprachen einfach eigenständig aneignen ?

LG Valentin

Schule, Informatik, Softwareentwickler, Wirtschaftsinformatik, Ausbildung und Studium, Wirtschaft und Finanzen, Beruf und Büro

Meistgelesene Beiträge zum Thema Informatik