-
Gesamte Inhalte
9912 -
Benutzer seit
-
Letzter Besuch
-
Tagessiege
3
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Klotzkopp
-
[C++/MFC] Problem mit farbigen Icons
Klotzkopp antwortete auf MiBo's Thema in C++: Compiler, IDEs, APIs
Hier solltest du memDC benutzen, nicht pViewDC. Der hat doch mit dem Zeichnen gar nichts zu tun. -
Mathe-Aufgabe mit Summe als Divisor
Klotzkopp antwortete auf smash's Thema in Prüfungsaufgaben und -lösungen
Mach die Brüche gleichnamig und multipliziere dann beide Seiten der Gleichung mit dem neuen Nenner. -
Es muss doch kein FileStream sein. Wie wäre es mit einem MemoryStream?
-
Darf ich fragen, wozu? Was hast du damit erreicht, außer die Daten auf die fünffache Größe aufzublasen?
-
Antwort_01[0] ist das erste Element des Arrays Antwort_01. Antwort_01[1] ist das zweite Element des Arrays Antwort_01. ... Antwort_01[99] ist das hundertste (und letzte) Element des Arrays Antwort_01. Quizfrage: Was ist Antwort_01[100]? Und warum verwendest du überhaupt char-Arrays? Den Header für std::string hast du schon eingebunden, also benutz die Klasse doch auch Die Warnungen, die der Compiler ausspuckt, solltest du übrigens auch nicht ignorieren. Meistens ist was dran.
-
Jede registrierte ProgID hat einen Unterschlüssel unter HKEY_CLASSES_ROOT. Die CLSIDs stehen unter HKEY_CLASSES_ROOT/CLSID.
-
Ausprobieren halte ich für gewagt. Du solltest nicht irgendwelche Funktionen aufrufen, von denen du nicht weißt, was sie tun. Erstens kannst du die Wirkung unter Umständen gar nicht beobachten, weil beispielsweise nur der interne Zustand eines Objekts geändert wird, oder weil eine Wirkung erst im Zusammenspiel mit anderen Funktionsaufrufen eintritt. Zweitens kann so ein Aufruf durchaus unerwünschte Effekte haben. Gelöschte Dateien gehören da vermutlich noch zu den kleineren Problemen. Alle COM-Objekte werden registriert, d.h. die Informationen darüber, welche DLL, OCX oder EXE ein bestimmtes Objekt bereitstellt, steht in der Registry unter der CLSID des Objekts (das ist der 16-Byte-Zahlenwert wie {000209FF-0000-0000-C000-000000000046}). Wenn du in VB CreateObject benutzt, sucht das Programm in der Registry nach dem angegebenen Namen (die sog. ProgID), um darüber die CLSID zu ermitteln, und darüber wiederum die zu benutzende DLL oder EXE. Wenn das Objekt das IDispatch-Interface implementiert (und das muss es, um aus VB6 benutzbar zu sein), kannst du die Methoden und Eigenschaften zur Laufzeit ermitteln. Das sagt dir aber immer noch nicht, wie das Objekt zu benutzen ist.
-
Was versprichst du dir denn eigentlich davon? Selbst wenn eine Anwendung eine COM-Schnittstelle hat, heißt das nicht, dass du damit die Anwendung so kontrollieren kannst, wie das bei den Office-Produkten der Fall ist. Das COM-Automatisierungsinterface von Word zum Beispiel stellt praktisch alle Funktionen von Word zur Verfügung. Das muss aber nicht so sein. Weder muss eine COM-Schnittstelle dieselbe Funktionalität zur Verfügung stellen wie die Anwendung selbst, noch muss sie vollständig sein. Ich habe hier beispielsweise eine Anwendung, die eine COM-Schnittstelle hat. Sie stellt von ihren vielen Funktionen genau zwei über COM zur Verfügung. Und in diesen beiden Funktionen verhält sie sich über COM anders, als wenn man die Funktion direkt aus der Anwendung aufrufen würde. Und man muss genau wissen, wie man diese Funktionen benutzt. Du scheinst dir unter COM eine automatisch vorhandene Fernsteuerungsmöglichkeit für jede Art Anwendung vorzustellen, das ist aber nicht der Fall. Beschreib also bitte, was du damit erreichen willst. Vielleicht geht's ja auch anders.
-
Die wenigsten Anwendungen haben überhaupt eine COM-Schnittstelle. Das ist nichts, was man für jede Anwendung "freischalten" könnte. COM-Objekte müssen in der Anwendung implementiert sein, das passiert nicht automatisch. Wenn also eine Anwendung gar keine COM-Schnittstelle hat, kannst du nichts machen. Wenn sie eine hat, die aber nur nicht registriert ist, kannst du die Regstrierung mit regsvr32.exe (bei DLLs) durchführen. EXE-COM-Server haben üblicherweise einen Kommandozeilenschalter für die Regstrierung. Beides erfordert allerdings Administratorrechte. Das bestimmt die Anwendung/Bibliothek selbst, du musst es also vorher wissen. Wie gesagt, das ist kein Mechanismus, um beliebige Anwendungen aus VB zu benutzen. Die Anwendung muss das explizit anbieten.
-
Du kannst davon ausgehen, dass "negieren" keine eigene Anweisung erfordert. Es läuft immer auf einen Null-Vergleich mit einer nachfolgenden Verzweigung hinaus. Der Unterschied ist dann nur, welche Verzweigungsanweisung benutzt wird. Das tun And und Or in VB nicht. Genau dafür gibt's ja AndAlso und OrElse, die verhalten sich wie && und ||. Eine Entsprechung für And und Or gibt's in C# nicht, es sei denn, man missbraucht die bitweisen Operatoren.
-
Bitte stell die exakte und vollständige Fehlermeldung hier rein (Copy&Paste), nicht deine persönliche Interpretation. Und es ist auch immer hilfreich, wenn du den Code dazu zeigst.
-
Siehe meine Signatur. Mit "funktioniert nicht" kann niemand etwas anfangen. Wenn du eine Fehlermeldung bekommst, schreib die bitte hin. Und wenn nicht, beschreibe, wie sich das gewünschte vom beobachteten Verhalten unterscheidet.
-
Das ist ERROR_FILE_NOT_FOUND, der Text stimmt also. Der Rückgabewert ist allerdings nicht dokumentiert. Du bist offenbar nicht der Einzige mit genau diesem Problem: SHGetKnownFolderPath for x64 Program Files under WoW64 fails.. Eine Lösung steht da aber leider nicht. Du könntest die Umgebungsvariable ProgramFiles auswerten.
-
Warum benutzt du dann SHGetKnownFolderPath? Das geht, wie gesagt, nur ab Vista aufwärts.
-
Leider erwähnst du nicht die Zielplattform. Ab Vista aufwärts gibt es SHGetKnownFolderPath, davor (also XP) SHGetFolderPath.
-
C# Rechner hängt sich auf, sobald Form2 aufgerufen wird
Klotzkopp antwortete auf nubbeldupp's Thema in .NET
Ich vermute, es liegt an WaitForExit, allerdings würde das nicht die hohe Prozessorauslastung erklären. Lass das Programm mal im Debugger laufen, und unterbrich es, wenn es "hängt", dann solltest du im Call Stack sehen können, wo es steht. -
String.Join Method (System)
-
Ist das Lernen von C++ ein Muss?
Klotzkopp antwortete auf Quantus's Thema in Ausbildung im IT-Bereich
C++ kommt eigentlich ganz gut ohne Pointerhaufen aus, wenn man's richtig macht. Was ist denn für dich "dreckig"? -
Der Link ist kaputt. Unabhängig davon vermute ich, dass du mit Mono nicht weit kommen wirst. Solche Programme verwenden in aller Regel aus der WinAPI importierte Funktionen, die du unter Mono nicht haben wirst.
-
Wie ich bereits sagte:
-
Kann nicht sein. Entweder liefert der Compiler einen Fehler (den du dann bitte nennst), oder du kannst das Programm erstellen und ausführen und es kommt zu einem Laufzeitfehler, dann hat der Compiler aber nichts mehr damit zu tun. Ich glaube übrigens nicht, dass int array[n];etwas sinnvolles tun kann, wenn n an dieser Stelle noch gar nicht initialisiert ist. So legst du jedenfalls kein Array an, dass "magisch" die richtige Größe hat, sobald n einen Wert bekommt.
-
Nein, das ist nicht der Grund. Du versuchst, dem float newrows den String s zuzuweisen, das ist von deiner fehlgeschlagenen Ersetzung völlig unabhängig. Es gibt übrigens in der gesamten C++-Standardbibliothek keine Funktion oder Methode, in deren Namen Großbuchstaben vorkommen. Keine Ahnung, woher du Replace hast. Ich würde erst mal alles in einen Stringstream packen und dabei die Kommas durch Punkte ersetzen, und dann daraus einen float-vector befüllen: ifstream in("LissajouDaten1.txt"); in.unsetf(ios_base::skipws); stringstream ss; transform( istream_iterator<char>(in), istream_iterator<char>(), ostream_iterator<char>(ss), [](char c)->char { if(c==',') return '.'; return c; } ); vector<float> newrows; copy( istream_iterator<float>(ss), istream_iterator<float>(), back_inserter(newrows));[/code]
-
Und? Fehlt eine Using-Direktive? Hast du using System.Drawing.Printing;?
-
Ganz allgemein kannst du char-Arrays nicht mit Rückgabewerten von irgendwelchen Funktionen initialisieren. Welchen Typ gibt GetTagChar denn zurück? Den Rückgabewert von strcat (und verwandten Funktionen) braucht man üblicherweise nur, wenn man mehrere Aufrufe verketten will. Dieser Aufruf hängt Name2 an Name an, hier besteht keine Notwendigkeit, das noch einer weiteren Variablen zuzuweisen. str(n)cat gibt immer den ersten Parameter zurück. Damit könntest du einen Zeiger initialisieren (dann würde dieser Name3-Zeiger auf Name zeigen), aber kein Array. Das ist unsicher. Wenn in diesem String irgendwann mal ein Prozentzeichen auftaucht, bekommst du Probleme. Mach's so: printf("%s", Name3);
-
Du benutzt std::copy. Diese Funktion kopiert Daten, und beim Kopieren möchte man die Daten üblicherweise nicht verändern. Du könntest std::transform benutzen: int main() { ifstream in("LissajouDaten1.txt"); transform( istream_iterator<char>(in), istream_iterator<char>(), ostream_iterator<char>(cout), [](char c)->char { if(c==',') return '.'; return c; } ); }[/code] Wenn du keinen Compiler hast, der Lambda-Ausdrücke beherrscht, kannst du einen Funktor oder Funktionszeiger für die Transformierung benutzen: [code]struct ReplaceCommaWithPeriod { char operator() (char c) { if(c==',') return '.'; return c; } }; int main() { ifstream in("LissajouDaten1.txt"); transform( istream_iterator<char>(in), istream_iterator<char>(), ostream_iterator<char>(cout), ReplaceCommaWithPeriod() ); }