Artikel-ID: 167929 - Geändert am: Dienstag, 21. November 2006 - Version: 4.1 Speicherverluste werden gemeldet, wenn Sie mehrere MFC-DLLs verwenden
ProblembeschreibungWenn Sie ein Projekt, die MFC reguläre (USRDLL) DLLs oder ActiveX-Steuerelemente (OCX) enthält Debuggen, können Sie sehen, ähnlich der folgenden Speicherverluste im Debugger gemeldet:
a CDynLinkLibrary object at $00410F70, 64 bytes long
a CDynLinkLibrary object at $00410F70, 64 bytes long
{38} client block at 0x00410D80, subtype 0, 64 bytes long.
a CDynLinkLibrary object at $00410D80, 64 bytes long
a CDynLinkLibrary object at $00410D80, 64 bytes long
{36} client block at 0x00410C60, subtype 0, 64 bytes long.
a CDynLinkLibrary object at $00410C60, 64 bytes long
a CDynLinkLibrary object at $00410C60, 64 bytes long
UrsacheDiese Speicherverluste werden gemeldet, wenn mehrere Versionen der MFC-DLL im gleichen Prozess geladen werden. Da MFC-(AFXDLL) Erweiterungs-DLLs der genau denselben MFC-DLL wie die Aufruf-Anwendung erforderlich sind, kann dieses Problem nur auftreten, wenn mithilfe von MFC reguläre (USRDLL) DLLs oder ActiveX-Steuerelemente (OCX), die die freigegebene Version von MFC verwenden. Der häufigste Fall ist (MFC4xd.DLL) ANSI- und UNICODE (MFC4xxUd.DLL) Versionen von MFC in demselben Prozess mischen. Dies kann auch auftreten, wenn MFC42d.DLL und MFC40d.DLL zu mischen. LösungDiese Speicher Speicherverlust Benachrichtigungen falsch und können ignoriert werden. Da die anderen Dateien keine Kopie des MFC-kennt, ist es nicht einfach, diese false Verluste aus gemeldet wird beendet. Es ist jedoch möglich, false Speicherverluste von potenziellen real Speicherverluste zu trennen. Dies kann durch Überschreiben von CWinApp::ExitInstance() in der EXE und der DLL und TRACE() Anweisungen in Ihnen platziert durchgeführt werden: StatusEs handelt sich hierbei um ein beabsichtigtes Verhalten. Weitere InformationenBerücksichtigen Sie die folgenden Anwendungen/DLLs:
------------- --------------
= = = =
= MFC = Calls = MFC =
= APP = ------------> = USRDLL =
= = = =
= = = =
------------- --------------
| |
| |
| Calls | Calls
| |
\/ \/
------------- --------------
= = = =
= = = =
= MFC40d = = MFC40Ud =
= DLL = = DLL =
= = = =
------------- --------------
\ /
\ /
\ Calls / Calls
\ /
\/ \/
-------------
= =
= =
= MSVCR40d =
= (CRT) =
= =
-------------
Jedoch seit dem UNICODE (MFC40ud.DLL) und der ANSI (MFC40d.DLL) MFC-DLLs werden beide die gleiche CRT-DLL verwenden false Speicherverluste auf alle Objekte in die MFC-USRDLL zugewiesenen gemeldet. Dies geschieht, weil MFC abhängig von der CRT-DLL zuweisen und Nachverfolgen der gesamte Arbeitsspeicher. Er trennt Speicherzuordnungen aus den verschiedenen Versionen von MFC nicht. Wenn eine der MFC-DLLs entladen wird, ruft es die CRT dazu ein Speicherabbild, vorausgesetzt alle Links im Heap ein Speicherverlust ist. Diese Annahme ist jedoch falsch, da es zwei mehrere Kopien von MFC im Arbeitsspeicher. (c) 1997 Microsoft Corporation, alle Rechte vorbehalten. Beiträge von Katja Marie Bezirk, Microsoft Corporation. Die Informationen in diesem Artikel beziehen sich auf:
Maschinell übersetzter ArtikelWichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten. Den englischen Originalartikel können Sie über folgenden Link abrufen: 167929
(http://support.microsoft.com/kb/167929/en-us/
)
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
| Weitere Ressourcen Weitere SupportseitenCommunitySPRACHE AUSWÄHLEN |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Zum Anfang