In-Out Parameter bei verschiedenen CRT Dll Versionen
-
Donnerstag, 23. Februar 2012 08:47
Hallo,
das Problem an sich ist schon recht alt. Eine mit VS 2010 kompilierte DLL allokiert Speicher und übergibt als IN/OUT Parameter via COM Automation Aufruf an eine DLL, die mit VisualBasic 6.0 kompiliert wurde. Die DLL hält sich an die COM Memory Management Regeln, gibt den Parameter frei allokiert ihn neu (andere CRT dll) und gibt ihn zurück. Der Aufrufer findet die modifizierten Parameter und gibt ihn nach dem Aufruf frei.
Ergebnis ... Heap damaged.
Ich habe ein wenig gegoogelt und auch im Forum gesucht, aber bisher leider keine Lösung für das Problem gefunden.
Ich habe auch als Aufrufer leider keinerlei Informationen über die DLL, da ich nur mit einer COM Componente rede, die ich vorher nicht kenne. (Es handelt sich um ein COM Framework). Ich kann also auch die Exe nicht an die DLL anpassen, abgesehen davon wäre dies eh keine Lösung, da ich ggf. auch zwei mit verschiedenen VisualStudio Versionen kompilierte COM Komponenten gleichzeitig ansprechen könnte.
Weiß irgend jemand, ob es mittlerweile ein Rezept für CRT Versionsproblem gibt?
Vielen Dank schonmal im Voraus und viele Grüße,
Alex
Alle Antworten
-
Dienstag, 28. Februar 2012 08:59
Das ist doch eigentlich Quatsch. COM benutzt kene CRT!
In COM wird Speicher nur im COM-Heap angelegt und der ist übergreifend für einen ganzen Prozess gleich.
Siehe CoTaskMemAlloc:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms692727(v=vs.85).aspxWie bitte allokierst Du in der DLL Speicher und übergibst diesen via COM an VB6?
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Montag, 5. März 2012 11:39
-
Montag, 5. März 2012 11:39Besitzer
Hallo lxtazz,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT

Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Donnerstag, 12. April 2012 13:01
Hallo Martin,
vielen Dank für Deine Antwort.
Vielleicht ist da beim Allozieren des Speichers tatsächlich etwas verkehrt gelaufen.
Das Problem hat sich allerdings inzwischen erledigt, da die Componente zu alt ist und nicht mehr supported wird.Trotzdem, vielen Dank für Deine Antwort.
Viele Grüße,
Alex- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Donnerstag, 12. April 2012 13:05


