2008-08-02 9 views
31

Częścią mojej codziennej pracy jest utrzymywanie i rozszerzanie starszych aplikacji VB6. Wspólny silnik jest napisany w języku C/C++, a VB6 używa tych funkcji w celu poprawy wydajności.Wyładowanie elementu sterującego COM podczas pracy w VB6 IDE

Jeśli chodzi o programowanie asynchroniczne, interfejs C jest niewystarczający i polegamy na elementach sterujących COM, które wysyłają zdarzenia do VB6.

Mój problem polega na tym, że gdy rejestruję kontrolkę w VB6, VB ładuje tę kontrolkę do pamięci i nie rozładowuje jej dopóki nie zakończę pracy IDE VB6. Ponieważ kontrola jest ładowana przez cały czas, nie jestem w stanie przekompilować jej w VC6, ponieważ plik DLL jest zablokowany.

Rozwiązaniem, które znalazłem nie jest włączenie kontrolki w VB, ale użycie CreateObject() z pełną nazwą kontrolki. Problem polega na tym, że muszę zadeklarować moją kontrolę jako Obiekt, ponieważ VB6 nie wie nic o interfejsie, którego używam, i nie mam dostępu do IntelliSense, co jest uciążliwe.

Każdy pomysł, w jaki sposób mogę nakazać VB6 zwolnienie kontroli po zamknięciu aplikacji lub bezpośrednio w IDE?

Odpowiedz

27

Jestem prawie pewien, że nie ma dobrego sposobu zmuszenia VB6 do zwolnienia kontroli.

Oto, co robię ... zamiast uruchomiony Visual C i Visual Basic side-by-side, uruchom VB6 pod VC:

  1. załadować do VC
  2. Otwórz projekt zawierający swoją COM obiektów
  3. edycji, zmiany, itp
  4. W VC, ustaw wyjście wykonywalny do bycia VB6.EXE z odpowiednimi argumentami wiersza polecenia, aby załadować roboczy VB6
  5. teraz wystarczy nacisnąć F5, aby uruchomić IDE VB6 i załadować swój projekt VB6
  6. Jeśli chcesz ponownie zmienić kod COM, wyjdź z VB6.EXE, wprowadź zmiany i ponownie naciśnij F5. Dopóki będziesz zapisywać swoje miejsce pracy, VB6 zapamięta, jakie okna miałeś otwarte i wszystkie ustawienia twojego projektu.

Zalety tej metody:

  • można ustawić punkty przerwania w obiekcie COM i debugowania go przy użyciu pełnego źródłowego debuggera
  • Można szczęśliwie debugowania w C i VB jednocześnie
  • Ilekroć VB6 jest uruchomiony, zawsze ma najnowszą wersję DLL-ów COM
+1

To bardzo sprytne, postaram się to zrobić. Teraz zastanawiam się, czy moje stare konto oparte na plikach cookie może zostać połączone z moim nowym kontem opartym na OpenId, więc mogę oznaczyć tę odpowiedź jako odpowiedź ... –

+2

Działa to również z innymi IDE niż VB. Udało mi się to zrobić z Delphi/VB6. –

Powiązane problemy