2009-08-06 14 views
5

Mam mały problem z projektem Visual Basic 6. Wszystko działa poprawnie w IDE , ale plik wykonywalny ulega awarii za każdym razem, gdy uruchomię aplikację. Aplikacja używa wywołań zwrotnych do komunikacji z biblioteką C++. Nawet kod tak prosty, jak pokazujący okno komunikatu, kończy się niepowodzeniem po rozpoczęciu oddzwaniania.Aplikacja Vb6 działa w IDE, ale awarie plików wykonywanych

Zmieniłem tryb kompilacji na kod P, a problem nadal występuje.

Każda pomoc będzie doceniona.

Dziękuję wszystkim

+0

jest jakiś komunikat o błędzie pojawia się, gdy się zawiesi? – MarkJ

+0

Nie, to po prostu blisko –

Odpowiedz

3

Wygląda na to, że wywołania zwrotne mogą występować w innym wątku niż aplikacja jest uruchomiona. [EDYCJA: Jak widzę, Jim już zasugerował.] Jeśli tak jest, tak, kaboom tak szybko, jak tylko "dotkniesz" dowolnego związanego z OLE lub wywołań w środowisku wykonawczym. Ta sama historia, co w przypadku multimedialnych wywołań czasowych, fwiw i podejrzewam, że będziesz musiał zastosować takie same środki ostrożności, jak w przypadku tych, jeśli tak jest.

Krótka historia z różnymi wywołaniami wątków polega na tym, że musisz wysłać wiadomość do siebie, używając PostMessage zadeklarowanego w typelib, aby obiekt Err nie był ustawiony przez VB, a następnie pozwolić zwrotowi zwrotnemu. Dokonujesz własnego przetwarzania po otrzymaniu wysłanej wiadomości. Oto TypeLib Użyłem do tego z biblioteką CCRP Timers:

http://vb.mvps.org/tools/files/postmessage.zip

nadzieję, że pomoże ...

+0

Dziękuję bardzo Karl, i przepraszam za moją ignorancję, ale to mój pierwszy wizualny projekt podstawowy 6. Jak używać pliku tlb, próbowałem dodawać odwołanie w VB IDE, ale nie działa i czy mogę przekazać struct lub typ klasy do postMethod, ponieważ wywołanie zwrotne zwraca mi 4 wartości. –

0

Czy kod jest uruchamiany z tej samej lokalizacji, co IDE? Prawdopodobnie jest to problem referencyjny i musisz ponownie zarejestrować bibliotekę DLL.

Pakiet wdrażania powinien upewnić się, że wszystko zostało zainstalowane.

+0

tak jest w tej samej lokalizacji, w rzeczywistości inne połączenia do tej samej biblioteki dll działa dobrze –

+0

jesteś późno lub na początku wiążące? Również poniższe komentarze są prawidłowe ... umieszczenie segmentu kodu powodującego awarię/wywołanie obiektu byłoby miłe. – RiddlerDev

1

Kto dzwoni z powrotem do kogo? Pokaż nam mały kod.

IDE może maskować prawdziwe problemy, więc samo bycie w stanie uruchomić nie gwarantuje, że to, co robisz, jest obsługiwane.

Jednym z powszechnych problemów z wywołaniami zwrotnymi jest to, że środowisko uruchomieniowe VB6 nie jest bezpieczne dla wątków, więc jeśli inny wątek wywołuje ponownie kod VB, nie można zrobić niczego, co wywoła środowisko wykonawcze - jak ciągi dostępu lub obiekty.

Są sposoby obejścia niektórych z tych problemów, ale myślę, że najpierw musimy wiedzieć więcej.

0

kilka pytań:

  1. jest wykonywalny na tym samym komputerze, ponieważ został opracowany, lub jakiegoś innego?
  2. Czy plik używa pliku manifestu? Jeśli tak, czy główne motywy XP są wywoływane?
  3. Ponadto, jeśli używasz manifestu, czy używasz SXS do plików OCX?
Powiązane problemy