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

0 użytkowników i 1 Gość przegląda ten wątek.

Offline piachu

  • Nowy użytkownik
  • *
  • Wiadomości: 1
  • Reputacja +0/-0
  • 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 :)

Offline matizk

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
  • 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

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
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();
Daniel, Białystok.

Offline matizk

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
  • 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

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
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.
Daniel, Białystok.

Offline matizk

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
  • 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

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
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 ?
Daniel, Białystok.

Offline NemoSoftware

  • Nowy użytkownik
  • *
  • Wiadomości: 12
  • Reputacja +0/-0
  • Wersja programu: GT/Nexo/Navireo
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

Offline tomaszf

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 523
  • Reputacja +12/-0
  • Wersja programu: Subiekt GT 1.66
Odp: zestawienia COM
« Odpowiedź #23 dnia: Czerwiec 05, 2015, 10:37:34 »
Pozwole sobie odkopać temat bo mój problem dotyczy poruszanego tu problemu.

Próbuje zapoznać się z zestawieniami COM.
Zgodnie z tym co wyczytałem w tym temacie utworzyłem projekt klasy, we właściwościach projektu wybrałem .NET Framework 2.0, zaznaczyłem Make assembly COM-Visible i dodatkowo automatyczną rejestrację w systemie (Register for COM interop).
Dodałem referencje do ZestManLib, a w kodzie wyklepałem:
using System;
using System.Collections.Generic;
using System.Text;
using ZestManLib;


namespace ClassLibrary3
{
    public class Class1: IZestawienieWlasne
    {
        public string Nazwa
        {
            get { return "Nazwa mojego zestawienia"; }
        }
        public string Opis
        {
            get { return "Opis mojego pierwszego zestawienia"; }
        }
        public int Programy
        {
            get { return 1; }
        }
        public void Wykonaj(IZestawienieComDane pZestawienieComDane)
        {
            Form1 form1 = new Form1();
            form1.Show();
        }
    }
}

jednak przy próbie dodania do zestawień Subiekt zwraca błąd:
Cytuj
Wskazany plik nie zawiera poprawnych komponentów zestawień.

Co mogłem zrobić źle ?
« Ostatnia zmiana: Czerwiec 05, 2015, 10:50:04 wysłana przez tomaszf »

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: zestawienia COM
« Odpowiedź #24 dnia: Czerwiec 05, 2015, 11:24:37 »
Co mogłem zrobić źle ?

Niestety nie napisałeś co dokładnie zrobiłeś... od momentu utworzenia biblioteki i jej rejestracji ?
Daniel, Białystok.

Offline tomaszf

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 523
  • Reputacja +12/-0
  • Wersja programu: Subiekt GT 1.66
Odp: zestawienia COM
« Odpowiedź #25 dnia: Czerwiec 05, 2015, 13:21:43 »
hmmm....
nie do końca rozumiem...
tak jak napisałem:
1. stworzyłem projekt klasy (zgodnie z opisem w tym temacie)
2. przy kompilacji biblioteka została zarejestrowana w systemie
3. spróbowałem dodać to zestawienie do subiekta (prawoklik dodaj własne COM) i Subiekt zwrócił błąd "Wskazany plik nie zawiera poprawnych komponentów zestawień."

chyba nic  więcej nie robiłem  :)

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: zestawienia COM
« Odpowiedź #26 dnia: Czerwiec 05, 2015, 14:34:03 »
Jak to często bywa wszystko rozbija się o szczegóły... Nie napisałeś z jakiej lokalizacji wskazywałeś bibliotekę przy dodawaniu zestawienia SQL - z katalogu VS czy gdzieś skopiowałeś ?
Daniel, Białystok.

Offline tomaszf

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 523
  • Reputacja +12/-0
  • Wersja programu: Subiekt GT 1.66
Odp: zestawienia COM
« Odpowiedź #27 dnia: Czerwiec 05, 2015, 14:37:17 »
Wskazywałem plik w domyślej lokalizacji VS czyli  u mnie :
C:\Users\Tomasz\Documents\Visual Studio 2013\Projects\ClassLibrary3\ClassLibrary3\bin\Debug

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: zestawienia COM
« Odpowiedź #28 dnia: Czerwiec 05, 2015, 15:04:41 »
Rozumiem, że masz w katalogu biblioteki interop'a "Interop.ZestManLib.dll' ? Spróbuj w takim razie jeszcze wyrejestrować bibliotekę i zarejestrować ponownie za pomocą VS, jeśli to nic nie zmieni to zrób to ręcznie.
Daniel, Białystok.

Offline tomaszf

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 523
  • Reputacja +12/-0
  • Wersja programu: Subiekt GT 1.66
Odp: zestawienia COM
« Odpowiedź #29 dnia: Czerwiec 05, 2015, 15:11:46 »
Ręczna rejestracja biblioteki pomogła - dziękuję za pomoc :)

Forum Użytkownikow Subiekt GT

Odp: zestawienia COM
« Odpowiedź #29 dnia: Czerwiec 05, 2015, 15:11:46 »