Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Umstellung von MS VC++ 6.0 auf MS VC++ .NET

Empfohlene Antworten

Veröffentlicht

Da sich die Probleme häufen, ein VC++ 6.0 Projekt in ein VC++ .NET Projekt zu konvertieren, habe ich mal dieses Thema erstellt.

Er bringt mir folgende Fehlermeldung:

d:\Microsoft Visual Studio\VC98\MFC\SRC\STREX.CPP(28) : error C2039: 'CString': Ist kein Element von 'ATL::CStringT<BaseType,StringTraits>'

Er greift also noch auf den alten Ordner von VC++ 6.0 zu, da ich das .NET auf LW G: installiert habe.

Ich habe alles abgesucht, um diesen Pfad zu ändern, habe aber nichts gefunden.

Wirklich?...auch bei "groesseren" Projekten?

...und wo ist da der Sinn dabei? (mal abgesehen von privatem Gebrauch)

bzw. wer kann sich das leisten, ein fertiges Projekt noch zu konvertieren?

Goos

Original geschrieben von Goos

Wirklich?...auch bei "groesseren" Projekten?

Ich habe erst letzte Woche testweise ein Projekt mit > 500.000 Zeilen konvertiert.

...und wo ist da der Sinn dabei? (mal abgesehen von privatem Gebrauch)
Da gibt's einiges:

  • Die IDE hat sich verbessert
  • Der Compiler hat sich stark verbessert
  • Eine ganze Reihe Macken aus MFC und ATL sind weg

bzw. wer kann sich das leisten, ein fertiges Projekt noch zu konvertieren?
Wer hat was von fertig gesagt? ;)
Original geschrieben von Klotzkopp

Ich habe erst letzte Woche testweise ein Projekt mit > 500.000 Zeilen konvertiert.

Oki dann funktionierts wohl recht gut vermut ich mal ;)

Original geschrieben von Klotzkopp

Da gibt's einiges:

  • Die IDE hat sich verbessert
  • Der Compiler hat sich stark verbessert
  • Eine ganze Reihe Macken aus MFC und ATL sind weg

Da kann ich nun nichts zu sagen, denn bei uns wird kein VC++.NET eingesetzt und ich hab auch nicht die Untersuchungen dazu durchgefuehrt. Scheinbar taugts zumindest nicht fuer alle Belange mehr als das alte.

Original geschrieben von Klotzkopp

Wer hat was von fertig gesagt? ;)

Keiner direkt, aber ich bin halt mal davon ausgegangen. Hat sich fuer mich irgendwie so angehoert :D

Goos

  • Autor

Ein ganz dringendes Problem:

Ich habe ein Win32-Programm unter XP mit MS VC++ .NET entwickelt und dazu ein Setup-Programm.

Ich habe das Programm unter Win 98 installiert. Die Installation lief einwandtfrei, aber es läuft nicht.

Folgende Fehlermeldung:

Debug Assertion Failed!

File: occmgr.cpp

Line: 410

Ich brauche dringend eine Antwort, weil ich das Projekt heute zum Testen rausgeben möchte.

Hallo,

bei uns in der Firma wurden alle Projekte konvertiert.

Nur nicht von Produkten, die nicht mehr gepflegt werden.

Wegen deinem Problem:

Schau mal ob bei Dir irgendwo

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS

steht. Wenn ja dann solltest du das mal Löschen.

  • 2 Wochen später...
  • Autor

Diese Zeile steht nirgends drin. Habe in der gesamten Projektmappe gesucht.

Man hat mir auch empfohlen, auf dem Win98-Rechner das .NET-Framework zu installieren, das hat auch nicht geholfen.

Wofür braucht man das Framework überhaupt?

@Klotzkopp:

Ich habe die Zeile #define WINVER 0x0400 in meiner Haupt-Header-Datei für das Projekt stehen. Soll ich den Wert auf 0x0410 ändern?

  • 3 Wochen später...
  • Autor

Nun stehe ich endgültig auf dem Schlauch.

Ich bin mal die Projekt-Eigenschaften durchgegangen und habe bei

Projekteigenschaften - Linker - Optimierung - Für Windows 98 optimieren

den Wert von Standard auf Ja(/opt: WIN98) geändert. Es hat nichts gebracht.

Ich wäre für schnelle Hilfe dankbar.

  • 2 Wochen später...
  • Autor

Ich habe es aufgegeben und schreibe es mit .Net nochmal.

Dabei ist mir beim Debuggen folgende Meldung aufgefallen:

Control tried to invalidate pixels outside its bounds.

Ist da irgend was mit meinem Dialog nicht iO?

  • Autor

Mit VS 6 war es so einfach...

Ich hatte in der alten Version den Windows Media Player als Steuerelement eingebunden und alles ging von selbst. Ich konnte eine Variable hinzufügen und die Klasse war auch schon drin.

Jetzt ist es etwas schwieriger:

Ich füge den WMP als Toolbox-Element ein, danach in meinen Dialog. Jetzt wollte ich wie vorher eine Variable zuweisen, mit Rechtsklick auf das Element und... Variable hinzufügen ist deaktiviert.

Wie funktioniert das jetzt mit .NET?

Ich habe auch schon in einem Buch geblättert, aber da werden nur die schon vorhandenen ActiveX-Elemente beschrieben, bei denen es prima klappt.

  • Autor

Es funktioniert nicht richtig mit dem Media Player.

Ich habe der Dialogklasse eine Variable hinzugefügt, dabei kann man festlegen, ob es eine Steuerelement-Variable sein soll.

Die Variable wird allerdings mit einer "falschen" Klasse verbunden, mit der ich nichts anfangen kann, weil dort die Funktionen wie Play() und Stop() nicht enthalten sind.

Ich weis nicht mehr weiter. :confused:

  • Autor

Die Klasse, die eingebunden wird ist COcx1_medplay.

Man kann das auch nicht beeinflussen, welche Klasse er einbindet.

In der alten Version 6.0 war es CMediaPlayer.

Auch die DialogID unterscheidet sich:

.NET: IDC_OCX2_MedPlay //MedPlay ist meine Bezeichnung

6.0: IDC_MediaPlayer2

Original geschrieben von Narf!

Die Klasse, die eingebunden wird ist COcx1_medplay.

Man kann das auch nicht beeinflussen, welche Klasse er einbindet.

Ich hab das mal nachvollzogen: Es wird keine Klasse "eingebunden", sondern eine neu erstellt. Diese Klasse ist ein Wrapper um ein COM-Klasse, die die MediaPlayer-Interfaces (IWMP...) implementiert.

Mit put_URL solltest du die Wiedergabe starten können.

Das Ganze hat vermutlich nichts mit der Version des Visual Studio, sondern mit der Version des MediaPlayers zu tun, denn diese Interfaces sind alle für WMP 9.

  • Autor

Ich habe mir das mal in der Hilfe angesehen, aber so richtig nützt mir das nichts.

Das Programm muss abwärtskompatibel sein, also auch der MediaPlayer.

Im VS C++ 6.0 habe ich den WMP 7.1 eingebaut, da geht das alles mit den Funktionen, aber ich kann den nicht unter XP installieren, um ihn in .Net rein zubekommen.

Irgend wie muss man doch an die alten Funktionen rankommen, damit auch die Nutzer, die ihr System nicht ständig updaten das Programm nutzen können.

  • Autor

Ich habe mir aus dem Steuerelement WMP alle Klassen erstellen lassen und die Funktionen gesucht, die ich brauche.

In zwei Klassen habe ich diese auch gefunden. Nun denke ich mir, das man über die erstellte Klasse OCX1, die C++ erstellt, wenn man dem Steuerelement eine Variable zuordnet, auf diese Klassen zugreifen kann, aber wie?

Ich habe das mal so probiert:

In der Klasse OCX1 gibt es die Funktion LPDISPATCH get_settings(), meine Variable ist m_MedPlay, mein Versuch LPDISPATCH set=m_MedPlay.get_settings() brachte nicht den gewünschten Erfolg, auf die Funktionen set->get_volume() usw. zuzugreifen, es werden ganz andere Funktionen angezeigt.

Wie komme ich an die erforderlichen Funktionen??? :confused:

  • 6 Monate später...
  • Autor

Bin wieder mal am rumprobieren und kriege es nicht gebacken.

Dann schau dir die Interface IWMPCore* und IWMPPlayer* an, da sollte alles dabei sein, was du brauchst.

Wie komme ich denn an diese Interfaces ran?

Und wie funktioniert eine Wrapper-Klasse?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.