cli und MFC zusammen....
-
Hallo,
also ich habe MFC-Code vorliegen, den ich gerne ändern und in mein .NET programm aufrufen möchte.
Damit ich den Code aber nicht komplett umschreiben muss, möchte ich ihn gerne weiterhin als MFC compilen.
Ich habe also mein C++ Cli-Form projeckt, und möchte darain den MFC Code compilieren.
Also stelle ich in den Projekteigenschaften die CLI einbindung ein.
Dann binde ich "#include <afxwin.h>" ein, und starte mein Programm, und was passiert? Es kommt eine MFC Exception und mein Programm stürtzt ab. Und das NUR vom einbinden der AfxWin.h.
Hat jemand eine Ahnung wie ich ClI mit MFC unterstützung kompilieren kann, so das es funktioniert?
Gruß Jan
-
ok, ich hab ne lösung gefunden:
1. Change the "entry point" in you linker settings from "main" to
"wWinMainCRTStartup"
2. Add "#include <afxwin.h>" to your "stdafx.h"
3. Replace your "main" method with the following:
class CMFCApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(fal se);
// Create the main window and run it
Application::Run(gcnew Form1());
return FALSE;
}
} theApp;
-
Das funzt?
Bekomme bei mir diese Fehlermeldung.1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Hast Du einen Tipp?
Gruß Doug_HH
-
Doug_HH schrieb:
Das funzt?
Bekomme bei mir diese Fehlermeldung.1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Hast Du einen Tipp?
Gruß Doug_HH
Wie wäre es damit dem Präprozessor _AFXDLL mit zu geben (in den Projekteinstellungen)?
-
Stelle Dein Projekt auf die "dynamische CRT (DLL)" und die "dynamische MFC (DLL)" um!!!!
-
Dank für den Vorschlag, aber jetzt bekomme ich diese Fehlermeldung.
Das sind 18 Fehler.1> WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afxv_w32.h(242) : error C3641: "DrawState": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afxv_w32.h(260) : error C3641: "DrawStatusText": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winbase.h(1849) : error C3641: "FreeResource": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afxv_w32.h(274) : error C3641: "UnlockResource": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(90) : error C3641: "InterlockedExchangePointer": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(104) : error C3641: "ATL::_AtlGetThreadACPFake": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(130) : error C3641: "ATL::_AtlGetThreadACPReal": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(137) : error C3641: "ATL::_AtlGetThreadACPThunk": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(147) : error C2440: '=': 'UINT (__clrcall *)(void) throw()' kann nicht in 'ATL::ATLGETTHREADACP' konvertiert werden
1> Die Adresse einer Funktion liefert die __clrcall-Aufrufkonvention in /clr:pure und /clr:safe. Verwenden Sie evtl. __clrcall im Zieltyp.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(151) : error C2440: '=': 'UINT (__clrcall *)(void) throw()' kann nicht in 'ATL::ATLGETTHREADACP' konvertiert werden
1> Die Adresse einer Funktion liefert die __clrcall-Aufrufkonvention in /clr:pure und /clr:safe. Verwenden Sie evtl. __clrcall im Zieltyp.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(158) : error C3641: "ATL::_AtlGetConversionACP": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(594) : error C3641: "AtlA2WHelper": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(613) : error C3641: "AtlW2AHelper": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(631) : error C3641: "AtlA2WHelper": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(636) : error C3641: "AtlW2AHelper": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atlconv.h(589) : error C3641: "AtlDevModeW2A": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atltrace.h(64) : error C2440: 'default argument': 'int (__cdecl *)(int,const char *,int,const char *,const char *,...)' kann nicht in 'ATL::CTrace::fnCrtDbgReport_t' konvertiert werden
1> Die Adresse einer Funktion liefert die __clrcall-Aufrufkonvention in /clr:pure und /clr:safe. Verwenden Sie evtl. __clrcall im Zieltyp.
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\atltrace.h(143) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
1>Das Buildprotokoll wurde unter "file://c:\RB-Softarticle Software\HSL\WindowsForms\DateiDrucken\DateiDrucken\Debug\BuildLog.htm" gespeichert.
1>DateiDrucken - 18 Fehler, 0 Warnung(en)
-
Stelle "COmmon language runtime support" *nur* auf "/clr"!
-
Danke, hat super geklappt.
Gruß, Doug_HH