2 Stimmen

ATL: Methode kann nicht von einer COM-Schnittstelle entfernt werden - erscheint IMMER wieder wie von Zauberhand

Umwelt: VS2008, C++ ATL COM, 64Bit, Windows 7

Ich versuche, eine Methode aus einer älteren COM-Schnittstelle zu entfernen. Ich ändere die *.idl, ändere die zugehörigen *.h- und *.cpp-Implementierungsdateien und entferne sie auch aus der .h-Datei des Hauptprojekts. Ich kann das gesamte Projekt nach dem alten Methodennamen durchsuchen - er wird nicht angezeigt und lässt sich problemlos kompilieren und verlinken. Wenn ich jedoch den Object Browser verwende, um die kompilierte DLL zu betrachten, ist die verdammte Methode immer noch da! Wenn ich die DLL in einem .NET-Projekt "referenziere", wird die Methode angezeigt. Wenn der .NET-Code versucht, die Methode zu verwenden, erhält er eine Speicherausnahme (was sinnvoll ist). Ich kann nicht für das Leben von mir herausfinden, wie die IDL zu ändern, entfernen Sie die Methode Code und haben die resultierende kompilierte DLL korrekt sein.

Wo zum Teufel ist die Methode versteckt, und gibt es eine andere Möglichkeit, eine Methode aus einer vorhandenen ATL-generierten COM-Schnittstelle zu entfernen? Ich bin verblüfft! Vielen Dank!

3voto

AndersK Punkte 34870

Haben Sie die Registrierung des alten DLL-Moduls aufgehoben und das neue Modul registriert? Möglicherweise gibt es in Ihrer Registrierung einen inkonsistenten Eintrag.

Vergewissern Sie sich auch, dass keine vorkompilierten Header usw. herumliegen, damit Sie beim Kompilieren sicher sein können, dass keine alte Kopie enthalten ist.

Wahrscheinlich ist es am besten, das gesamte Build-Verzeichnis (Debug/Release) vor dem Kompilieren zu löschen, nur für den Fall, dass Sie vergessen haben, einige alte Dateien zu löschen.

Überprüfen Sie auch den Pfad, in dem die .dll geladen ist, den Sie im Objektbrowser sehen können, und vergleichen Sie ihn mit dem Registrierungseintrag. Vielleicht haben Sie zuvor eine 32-Bit-Version verwendet?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X