-
Gesamte Inhalte
1804 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von TDM
-
-
Naja, wenn p nicht gesetzt sein würde, probiert er doch NULL zu deleten oder ? Edit: ok, habs nachgelesen, stimmt ist überflüssig: The C++ language guarantees that delete p will do nothing if p is equal to NULL. Since you might get the test backwards, and since most testing methodologies force you to explicitly test every branch point, you should not put in the redundant if test. C++ FAQ (part 08 of 14)
-
Der Destruktor wird aufgerufen, sobald das Objekt terminiert (zerstört) wird. Z.B. bei Auto-Instanzen nach beenden der Funktion. Normale Member werden auch zerstört - Pointer nicht, deswegen das Freigeben des Speichers Ok, Klotzkopp war schneller
-
mit free oder delete BSP: #define SAFE_DELETE(p) if (p != NULL) {delete p; p = NULL;} class foo { public: foo() { m_pint = new int; } ~foo() {SAFE_DELETE(m_pint)} private: int* m_pint; };
-
wenn du mit malloc oder new einen Speicher reservierst, muss du den auch wieder freigeben
-
Das war ja nur ein Beispiel. Hauptsächlich gings mir drum, ob das normal ist, dass statische Variablen in nichtstatischen Funktionen von allen Membern geteilt werden. Aber das hattest du ja schon bestätigt.
-
Naja, da man in einer Klasse nicht die Instanz der Klasse selber anlegen kann, dachte ich mir folgendes: class CSingleton { public: CSingleton() { /* Memberinit */ } static const CSingleton& getInstance() { static CSingleton ton; return ton; }; };
-
hmm ok, hab mich nur gewundert. Also könnte man so z.B. eine statische Variable verstecken ? (etwa die Instanz einer Klasse, wenn sie ein Singelton ist)
-
Allgemeines Problem einiger Schüler: Faulheit.
-
Hallo, ich habe vorhin etwas an meinem Visual Studio gespielt und mir fiel da was sonderbares auf: Eine Klasse foo die eine Funktion bar zur Textausgabe hat: class foo { public: foo () { m_text = _T(""); } void bar() { static CString staticText = "Welt"; if (m_text != _T("")) staticText = m_text; cout << (LPCTSTR) staticText << endl; } CString m_text; }; und die main: int main(void) { foo a, b; a.m_text = "hi"; a.bar(); b.bar(); return 0; } Mich wundert es, dass beim Ausführen des Programms 2 Mal "hi" ausgegeben wird. Gilt eine statische Variable in einer Memberfunktion wirklich für Instanzen dieser Klasse oder kann man das umgehen? (was zwar sinnlos wäre, da Membervariablen usw. aber egal) würde mich jedenfalls mal interessieren, weil ich bisher immer dachte, dass pro Instanz immer neue Funktionspointer erzeugt werden.
-
Als was sind die beiden Arrays deklariert ? Normale Pointerarrays oder CArray?
-
Aus dsc-files projekt erstellen?
TDM antwortete auf Hellspawn304's Thema in C++: Compiler, IDEs, APIs
kompilerspezifische Trigger im Quelltext ? -
lokale Variablen füllen, AFX-Variablen füllen, updateData(false) ausführen Ok, danke für den Wink mit dem Zaunpfahl (ohne UpdateData gehts) :upps
-
Hallo folgendes Problem, ich möchte einen Dialog bei einem Klick auf einen Button anzeigen, wenn ich mit Pointern arbeite, funktioniert das, bei lokalen Objekten bekomm ich einen Fehler. Der Code mit Objekten: void MyDlg1::on_btn_clicked() { MyDlg2 dlg(this); dlg.setData(this -> data); dlg.DoModal(); } Code mit Pointer: void MyDlg1::on_btn_clicked() { MyDlg2 dlg = new MyDlg2(this); dlg -> Create(IDD_DLG2); dlg -> ShowWindow(SW_NORMAL); dlg -> setData(this -> data); } PS: Beide Klassen sind von CDialog abgeleitet. Nach dem Konstruktoraufruf für das Objekt ist hwnd = 0x000000. Der Fehler ist ein Assert von wincore.cpp (Line 3095). Kann mir jemand sagen, wo der Fehler liegt ?
-
Cache für Browser mittels Script aktivieren
TDM erstellte Thema in Skript- und Webserverprogrammierung
Hallo, ich möchte, dass wenn User auf eine HTML-Seite gehen, diese Seite von ihnen in den Cache geladen wird. Sollte ein Browser das Caching von Webseiten deaktiviert haben, möchte ich es per Script (JScript, Javascript, ...) aktivieren. Ist das überhaupt möglich und wenn ja, wie ? -
Dann können aber auch spätere User dort drin schreiben, und evtl den Browser aushebeln. Bei DLLs wäre das Problem nicht und zur Aktualisierung gibt es ja Patches. Wieso sollte das Plugin keinen Zugriff haben ?
-
Weil es eben der IE ist. Die einzige Idee ich evtl. da hätte, wäre eine Wrapper-DLL zu schreiben, die dann das Script aufruft. (Auch wenn das unüblich ist, da man dann gleich den Quelltext in C++ schreiben könnte.)
-
Meinst du Add-Ons ? Ich weiß nicht, ob das mit Scripten so einfach funktioniert. Die Add-Ons, die ich kenne, sind jedenfalls meist in irgendwelchen DLLs.
-
Man kann doch jeden Dateityp unter Linux ausführen.
-
Startbat, die die src.jar aufruft Funktioniert doch auch unter Linux.
-
Gut, da ich keine Lust auf irgendwelche Formatierungsprobleme habe und das so und so in einen String lade: if (zeit.GetTotalHours() < 10.0f) text = zeit.Format("%H:%M"); else text.Format("%d:%s", (int) zeit.GetTotalHours(), zeit.Format("%M")); Wundertoll. Geht. Danke.
-
Soweit geht alles - dennoch hätte ich eine andere Frage die hier reinpassen würde: Ich rufe COleDateTimeSpan::Format auf und lasse mir die Stunden bzw. Minuten ausgeben. Allerdings sind das immer nur die aktuellen Stunden und Minuten; sprich: Tage werden nicht umgewandelt. Bei einer Dauer von 1d:2h:30m werden z.b. nur 2h:30m angezeigt statt eigentlich 26h. Als Formatcode nehme ich %H (00 - 23) Gibt es einen Formatcode, der die absolute Stundenzahl ausgibt ?
-
Theoretisch müsste es gehen, wenn man über system() rmdir aufruft.
-
Problem beim Kopieren eines Objektes das eine Dispatchschnittstelle verwendet
TDM antwortete auf TDM's Thema in C++: Compiler, IDEs, APIs
So... Ich habe es geschafft, meinen Auftraggeber von der Notation und Struktur abzubringen. Deswegen habe ich auch jetzt das nicht mehr alles in eine Klasse geschrieben und siehe da - es geht. Als Beispiel mal die Klasse _Application (für Word selber) Documents und _Document: class _Application : public COleDispatchDriver { public: _Application() {} _Application(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {} _Application(const _Application& dispatchSrc) : COleDispatchDriver(dispatchSrc) {} public: public: LPDISPATCH GetApplication(); long GetCreator(); LPDISPATCH GetParent(); CString GetName(); LPDISPATCH GetDocuments(); //... }; class Documents : public COleDispatchDriver { public: Documents() {} Documents(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {} Documents(const Documents& dispatchSrc) : COleDispatchDriver(dispatchSrc) {} public: public: LPUNKNOWN Get_NewEnum(); long GetCount(); LPDISPATCH GetApplication(); long GetCreator(); LPDISPATCH GetParent(); LPDISPATCH Item(VARIANT* Index); void Close(VARIANT* SaveChanges, VARIANT* OriginalFormat, VARIANT* RouteDocument); LPDISPATCH Add(VARIANT* Template, VARIANT* NewTemplate); LPDISPATCH Open(VARIANT* FileName, VARIANT* ConfirmConversions, VARIANT* ReadOnly, VARIANT* AddToRecentFiles, VARIANT* PasswordDocument, VARIANT* PasswordTemplate, VARIANT* Revert, VARIANT* WritePasswordDocument, VARIANT* WritePasswordTemplate, VARIANT* Format); void Save(VARIANT* NoPrompt, VARIANT* OriginalFormat); }; class _Document : public COleDispatchDriver { public: _Document() {} _Document(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {} _Document(const _Document& dispatchSrc) : COleDispatchDriver(dispatchSrc) {} // Attributes public: // Operations public: CString GetName(); LPDISPATCH GetApplication(); long GetCreator(); LPDISPATCH GetParent(); LPDISPATCH GetBuiltInDocumentProperties(); LPDISPATCH GetCustomDocumentProperties(); CString GetPath(); LPDISPATCH GetBookmarks(); LPDISPATCH GetTables(); LPDISPATCH GetFootnotes(); LPDISPATCH GetEndnotes(); LPDISPATCH GetComments(); long GetType(); BOOL GetAutoHyphenation(); void SetAutoHyphenation(BOOL bNewValue); BOOL GetHyphenateCaps(); void SetHyphenateCaps(BOOL bNewValue); long GetHyphenationZone(); void SetHyphenationZone(long nNewValue); long GetConsecutiveHyphensLimit(); void SetConsecutiveHyphensLimit(long nNewValue); LPDISPATCH GetSections(); LPDISPATCH GetParagraphs(); LPDISPATCH GetWords(); LPDISPATCH GetSentences(); LPDISPATCH GetCharacters(); LPDISPATCH GetFields(); LPDISPATCH GetFormFields(); LPDISPATCH GetStyles(); LPDISPATCH GetFrames(); LPDISPATCH GetTablesOfFigures(); LPDISPATCH GetVariables(); LPDISPATCH GetMailMerge(); LPDISPATCH GetEnvelope(); }; Alle Methoden rufen ansich eigentlich immer nur die InvokeHelper-Methode mit unterschiedlichen Parametern auf. Jetzt muss ich ja "nur" noch was für die Bookmarks ect. schreiben. :beagolisc -
Problem beim Kopieren eines Objektes das eine Dispatchschnittstelle verwendet
TDM antwortete auf TDM's Thema in C++: Compiler, IDEs, APIs
Natürlich seh ich durch die Variablenbezeichnung noch durch; Dateityp, Verwendungszweck und Name sind eigentlich (für mich) ausreichend erklärt. Für angewiesene Notationen/Strukturvorgaben kann ich aber nichts. Das mit dem Makro weiß ich, dass das besch...eiden ist, aber dafür sind es ja Makros die kann ich einfach ändern ohne jede Zeile im Quelltext anzupassen. Z.B. #define MW(v) v Wie gesagt ist das Problem nach dem Destruktor: 116: CoUninitialize(); 0041193F 8B F4 mov esi,esp 00411941 FF 15 B8 FE 42 00 call dword ptr [__imp__CoUninitialize@0 (0042feb8)] 00411947 3B F4 cmp esi,esp 00411949 E8 D6 27 00 00 call _chkesp (00414124) 117: } 0041194E C6 45 FC 03 mov byte ptr [ebp-4],3 00411952 8B 4D F0 mov ecx,dword ptr [ebp-10h] 00411955 83 C1 34 add ecx,34h [COLOR="Red"];Hier...[/COLOR] 00411958 E8 2B FB FE FF call @ILT+1155(ATL::CComDispatchDriver::~CComDispatchDriver) (00401488) [COLOR="red"];... Verweis auf NULL -> Fehler[/COLOR] 0041195D C6 45 FC 02 mov byte ptr [ebp-4],2 00411961 8B 4D F0 mov ecx,dword ptr [ebp-10h] 00411964 83 C1 30 add ecx,30h 00411967 E8 9E F6 FE FF call @ILT+5(_com_ptr_t<_com_IIID<IDispatch,&_GUID_00020400_0000_0000_c000_000000000046> >::~_ 0041196C C6 45 FC 01 mov byte ptr [ebp-4],1 00411970 8B 4D F0 mov ecx,dword ptr [ebp-10h] 00411973 83 C1 08 add ecx,8 00411976 E8 8F F6 FE FF call @ILT+5(_com_ptr_t<_com_IIID<IDispatch,&_GUID_00020400_0000_0000_c000_000000000046> >::~_ 0041197B C6 45 FC 00 mov byte ptr [ebp-4],0 0041197F 8B 4D F0 mov ecx,dword ptr [ebp-10h] 00411982 83 C1 04 add ecx,4 00411985 E8 FE FA FE FF call @ILT+1155(ATL::CComDispatchDriver::~CComDispatchDriver) (00401488) 0041198A C7 45 FC FF FF FF FF mov dword ptr [ebp-4],0FFFFFFFFh 00411991 8B 4D F0 mov ecx,dword ptr [ebp-10h] 00411994 E8 EF FA FE FF call @ILT+1155(ATL::CComDispatchDriver::~CComDispatchDriver) (00401488) 00411999 8B 4D F4 mov ecx,dword ptr [ebp-0Ch] 0041199C 64 89 0D 00 00 00 00 mov dword ptr fs:[0],ecx 004119A3 5F pop edi 004119A4 5E pop esi 004119A5 5B pop ebx 004119A6 83 C4 60 add esp,60h 004119A9 3B EC cmp ebp,esp 004119AB E8 74 27 00 00 call _chkesp (00414124) 004119B0 8B E5 mov esp,ebp 004119B2 5D pop ebp 004119B3 C3 ret Deswegen habe ich den Destruktor auch in den try-block gepackt. Ich weiß, dass das Mist ist, aber da wird zumindest nicht das Fenster von wegen "Blabla.exe hat eine internen Fehler ausgelößt, möchten Sie dieses Problem melden?" angezeigt... Sobald das Problem weg ist, wird zumindest dieser Hack entfernt...:floet: