Autor Beitrag
georgeboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: So 19.09.21 08:34 
Hallo zusammen, ich möchte wissen ob Visual Studio 2008 Standard, und Visual Studio 2010 Professional, unter Windows 10 läuft. Ein C++ MFC Programm von mir lässt sich unter VS 2019 zwar compilieren, stürzt aber nach dem Starten ab. Bei VS 2008 Standard läuft es.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4492
Erhaltene Danke: 976

Win10
C#, C++ (VS 2015/17/19)
BeitragVerfasst: So 19.09.21 09:29 
Ja, sie sollten auch unter Windows 10 laufen.
Aber möchtest du nicht den Fehler beheben? Was zeigt denn der Debugger an?
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: So 19.09.21 12:47 
Die Fehlermeldung liefere ich noch nach, im folgenden der Code:
ausblenden C++-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
file2 = fopen(DateiName,"r"); // file2 ist null, obwohl die Datei vorhanden ist
if ( file2 == NULL )
{
  file = fopen(DateiName, "w");
  if ( file == NULL )
  {
    AfxMessageBox("Fehler: Bei Dateien.txt: " + DateiName + " falsches Verzeichnis !");
    LPO.LiParseCloseDateien();
    return true;
  };
  fprintf(file, "Neue Datei");
  fclose(file);
}
else
  fclose(file2);

OpenDocumentFile(DateiName); // hier kommt die Fehlermeldung


Vielleicht sollte ich eine verbesserte Version von "fopen" verwenden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4492
Erhaltene Danke: 976

Win10
C#, C++ (VS 2015/17/19)
BeitragVerfasst: So 19.09.21 15:28 
Ja, warum überhaupt C-Funktionen, wenn du die MFC verwendest? Warum also nicht CFile?

Ist DateiName ein absoluter Pfad oder ein relativer (denn dann ist es abhängig vom aktuellen Arbeitsverzeichnis)?
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: Mo 20.09.21 07:35 
Ich habe schon vieles versucht, das Problem mit OpenDocumentFile wird auch im Internet beschrieben. Mein MFC Programm pflege ich mit VS 2008/2010 weiter, alles andere mit C# .NET. Danke Dir !
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4492
Erhaltene Danke: 976

Win10
C#, C++ (VS 2015/17/19)
BeitragVerfasst: Mo 20.09.21 09:30 
Welchen Fehler denn und kannst du den Link mal angeben?
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: Mo 20.09.21 13:46 
Bei Google "Fehler bei OpenDocumentFile".
Vermutlich ist folgender Link, ein Beispiel dafür: Runtime error mfc120d.dll bei CWinApp::OpenDocumentFile

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4562
Erhaltene Danke: 946


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 20.09.21 14:20 
Da geht es darum das in der Debug Variante der Runtime Assertions fliegen wenn man die Runtime nicht richtig initialisiert.
Das finde ich vollkommen korrekt. Wenn das mit einer älteren Runtime nicht knallt hatte eher die alte Runtime einen Fehler als die aktuellere Version.

Wenn das vergleichbar ist mit deiner Situation, passiert dir das auch mit der deploybaren echten Runtime?
Und 2.ten wenn das vergleichbar ist mit deiner Situation warum initialisierst du die Runtime nun dann nicht einfach richtig?
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: Mo 20.09.21 14:43 
Darf ich als nicht Profi, ( ohne mich zu blamieren ) fragen, was das heisst, und wie man es macht, eine Runtime initialisieren ?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4562
Erhaltene Danke: 946


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 20.09.21 14:56 
Fragen stellen ist der Sinn dieses Forums ;)

Wie genau die Runtime vorbereitet werden muss sollte die Doku der entsprechenden Klasse/Methode dir sagen. Sozusagen die Vorbedingungen nennen bevor etwas benutzt werden kann.
Aus dem von dir verlinkten Forenbeitrag entnehme ich das die von die benutzte Klasse aus der OLE/COM Ecke stammt und daher das COM Subsystem von Windows initialisiert werden muss.

Das macht man per Aufruf der CoInitialize (bzw. am Ende per CoUnitialize) API.
Dem Forenbeitrag entnehme ich aber auch das das scheinbar in MFC durch afxOleInit() gekapselt ist und man diese am Anfang aufrufen sollte.

Wenn du diese Anwendung in irgendeiner alten Visual Studio Version angefangen hast wäre es möglicherweise hilfreich einfach mal in Visual Studio 2019 eine neue leere MFC App anzulegen und denn generierten Start/Initialisierungscode zu vergleichen was sich mittlerweile alles geändert hat und das passend in der eigentlichen Applikation nachziehen. Dann weißt du zumindest auch wo sich die Autoren der MFC gedacht haben von wo man das entsprechende aufrufen sollte.

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: Mo 20.09.21 16:37 
Ich weiss nicht, wo ich AfxOleInit() hinschreiben soll, an verschiedenen Stellen in InitInstance, hängt das Programm.

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4492
Erhaltene Danke: 976

Win10
C#, C++ (VS 2015/17/19)
BeitragVerfasst: Mo 20.09.21 16:50 
Hast du noch einen Aufruf von CoInitialize(NULL) drin?

Das beste wäre wohl, du setzt mal ein neues MFC-Testprojekt auf und testest ersteinmal die Grundfunktionalität von OpenDocumentFile.
georgeboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135



BeitragVerfasst: Mo 20.09.21 18:07 
Ich habe die Migration nach VS2019, nochmal erstellt, und den Migrationstext genauer gelesen, diese Projekte ( bei mir C++ MFC von VS2008 ) werden nicht unterstützt. Bei einer Test-Neuanlage hat OpenDocumentFile funktioniert. Aber InitInstance sieht bei VS2019 vollkommen anders aus, da wären im ganzen Programm sehr viele Änderungen nötig. Gut dass VS2008 auch auf Windows 10 läuft. Jetzt habe ich Euch umsonst genervt. Sorry ...

Moderiert von user profile iconTh69: Code-Tags hinzugefügt