Autor Wątek: zestawienia COM  (Przeczytany 2463 razy)

0 użytkowników i 2 Gości przegląda ten wątek.

Offline piachu

  • Nowy użytkownik
  • *
  • Wiadomości: 1
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: 1.28 SP1
Odp: zestawienia COM
« Odpowiedź #15 dnia: Luty 14, 2012, 10:52:14 »
Witam.
Właśnie męczyłem się z moim pierwszym zestawieniem COM.
Zdecydowanie pomogły mi wpisy kolegów alwik i klonel.
Mam tylko jedną uwagę do postu alwik'a: u mnie w VS 2010 musiałem we właściwościach projektu na zakładce Build zaznaczyć na dole opcję "Register for COM interop".
Po skopiowaniu przykładu i zaznaczeniu tej opcji moje pierwsze zestawienie ożyło :)

Forum Użytkownikow Subiekt GT

Odp: zestawienia COM
« Odpowiedź #15 dnia: Luty 14, 2012, 10:52:14 »

Offline matizk

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: Subiekt GT 1.28
Odp: zestawienia COM
« Odpowiedź #16 dnia: Marzec 18, 2012, 22:31:09 »
Witam,
też ostatnio wziąłem się za polepszanie Subiekta. Przeczytalem instrukcje no i napisałem sobie pare formów  - działa super. Ale jest problem... ktoś próbował uruchomić swoje zestawienie ponownie, bez wcześniejszego restartu Subiekta?

Moje spostrzeżenia
1. po uruchomieniu Subiekta, dopóki nie wybierzemy zestawienia nie jest ono załadowane (można dll'ke zmieniać)
2. Po załadowaniu zestawienia.. i stosuje tradycyjne ShowDialog() a później w uruchomionym oknie Close() - to niestety nie zwalnia dll'ki (ponowne uruchomienie zestawienia jest niemożliwe)
3. Po takim zabiegu nawet po zamknięciu SUbiekta.. proces subiekta nadal działa :/
4. Po zastosowaniu metod force (np. Enviroment.Exit) zamyka całego subiekta - co było do przewidzenia

Czy ktoś wie.. jak zrobić, aby można było ponownie uruchomić zestawienie? Wg mnie za 1 razem wykonuje tą metodą Wykonaj, a później już nie. A nie wiem jak zmusić subiekta to wyładowania dll'ki

Offline dkozlowski

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 679
  • Reputacja +73/-1
    • Zobacz profil
  • Wersja programu: Najnowsza
Odp: zestawienia COM
« Odpowiedź #17 dnia: Marzec 18, 2012, 22:58:17 »
Dispose() powinno pomóc, gdyż zgodnie z opisem metody "Form.Close" z pomocy:

Cytuj
The two conditions when a form is not disposed on Close is when (1) it is part of a multiple-document interface (MDI) application, and the form is not visible; and (2) you have displayed the form using ShowDialog. In these cases, you will need to call Dispose manually to mark all of the form's controls for garbage collection.


metoda ta w tym przypadku nie zwolni formy. Kod powinien wyglądać mniej więcej tak:

Cytuj
FormMain formMain = new FormMain(pZestawienieComDane);
formMain.ShowDialog();
formMain.Dispose();
Zanim zapytasz wciśnij "F1", to nie boli a często pomaga

Offline matizk

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: Subiekt GT 1.28
Odp: zestawienia COM
« Odpowiedź #18 dnia: Marzec 18, 2012, 23:29:05 »
Dzięki za odpowiedź. Niestety Dispose() nie działa. Ponadto nawet jakby się wykonała funkcja wówczas GC i tak zwalnia zasoby. Mój kod:
        public void Wykonaj(Ins.IZestawienieComDane cd)
        {
            Ado.Connection ado = (Ado.Connection)cd.Connection;
            string host = DanePolaczenia.GetDataSource(ado.ConnectionString);
            string baza = DanePolaczenia.GetInitialCatalog(ado.ConnectionString);
            string login = "trimpot";
            string haslo = "xxx";
            this.lc = new LinqConn(host, baza, login, haslo);
            Uruchom();
        }

        public void Uruchom()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            DokumentyF towaryF = new DokumentyF(this.lc);
            towaryF.ShowDialog();
            towaryF.Dispose();
        }

Hmm.. musi istnieć jakieś inne wyjście

Offline dkozlowski

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 679
  • Reputacja +73/-1
    • Zobacz profil
  • Wersja programu: Najnowsza
Odp: zestawienia COM
« Odpowiedź #19 dnia: Marzec 19, 2012, 00:20:21 »
No to jest winny, zgodnie z opisem z pomocy dla metody "Application.SetCompatibleTextRenderingDefault":

Cytuj
You should never call this method if your Windows Forms code is hosted in another application, such as Internet Explorer. Only call this method in stand-alone Windows Forms applications.

Z tą metoda też miałem podobne zachowanie zestawienia, bez niej działa jak wcześniej, czyli poprawnie.

Napisałem sobie mały starter do zestawień COM i przy próbie drugiego uruchmienia zestawienia z metodą "Application.SetCompatibleTextRenderingDefault" generowany jest wyjątek o treści: "Należy wywołać element SetCompatibleTextRenderingDefault, aby pierwszy obiekt IWin32Window został utworzony w aplikacji." Trzeba doczytać o co chodzi, ale to już innym razem.
Zanim zapytasz wciśnij "F1", to nie boli a często pomaga

Offline matizk

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: Subiekt GT 1.28
Odp: zestawienia COM
« Odpowiedź #20 dnia: Marzec 19, 2012, 18:43:17 »
O jezu.. jaka ze mnie gapa. Tak to jest jak się przekleja kod:) oczywiście nie może być Application.SetCompatibleTextRenderingDefault. Bardzo dziękuję za pomoc.
Mam jeszcze jeden dziwny problem.. u mnie na lapku moduł się bez problemu rejestruje do Subiekta, a jak chciałem dziś dziewczynom wgrać bo błąd: że moduł nie zawiera prawidłowych komponentów :/ Próbowałem nawet rejestrować RegAsm - zgodnie z zaleceniami w dokumentacji, ale bez skutecznie.
Czego to może być wina? Przenosze na inyy komp cały katalog release z VS na inny komp

Offline dkozlowski

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 679
  • Reputacja +73/-1
    • Zobacz profil
  • Wersja programu: Najnowsza
Odp: zestawienia COM
« Odpowiedź #21 dnia: Marzec 19, 2012, 19:32:22 »
Rozumiem, że to standardowy, nic nie mówiący błąd z Subiekta ? W kodzie widziałem Linq'a, a to już chyba .NET 3.5 - jest na stacji ? No i czy zostały skopiowane wszystkie używane Interop'y ?
Zanim zapytasz wciśnij "F1", to nie boli a często pomaga

Offline klonek

  • Nowy użytkownik
  • *
  • Wiadomości: 12
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: Navireo 1.12SP2 HF1
Odp: zestawienia COM
« Odpowiedź #22 dnia: Marzec 27, 2012, 19:42:54 »
GT  bazuje na dotnecie 2 i taki trzeba używać w rozszerzeniach COM czy Sferycznych inaczej dzieją się jakieś dziwne rzeczy. musiałem np. instalować na końcówkach kawałek VS2010 bo czegoś tam brakowało pomimo wszelkich update'ów. downgrade z 3.5 do 2.0 załatwił problem