Dodatek add-in, dostęp z innego projektu.

0

Witam,
zrobiłem** add-in** do pewnego programu powiedzmy X w C#. Jest to dll-ka, którą ładuję w programie X.
Wszystko pięknie działa, mam tam funkcję która generuje jakieś dokumenty.

Problem polega na tym że mam inny projekt, skompilowany jako plik exe i chciałbym z niego uruchamiać tą funkcję do generowania dokumentów.
Program X jest oczywiście uruchomiony i mój dodatek załadowany do tego programu.
Jak podejść do tego problemu?
Pozdrawiam.

0

Kupę szczegółów brakuje.

Te "inny projekt" można rozumieć nie jest twój?
W jakim języku wykonany?
Co to naprawdę jest, ma jakieś API, extension point itd?

Jak podejść do tego problemu?
Zupełnie inaczej.

Sierotka M.

0

"inny projekt" to mój projekt napisany w C#.
On musi być skompilowany do exe.
Jedyny problem to jak z jego poziomu skomunikować się z dodatkiem (dll), który mam zrobiony i działa załadowany do aplikacji X.

0
Janko M. napisał(a):

"inny projekt" to mój projekt napisany w C#.
On musi być skompilowany do exe.
Jedyny problem to jak z jego poziomu skomunikować się z dodatkiem (dll), który mam zrobiony i działa załadowany do aplikacji X.

Dodajesz DLL jako referencję i normalnie używasz.
Robisz using itd...

Chyba ze ciebie nie rozumiem.

0

To jest kod mojego AddIn:

    public class MyAddin : AddIn
    {
        public static MyAddin s_App = null;
		public static System.IntPtr _aplDesc = null;

        public MyAddin(System.IntPtr aplDesc) : base(aplDesc)
        {
            s_App = this;
			_aplDesc = aplDesc;
        }
        protected override int Run(string[] str)
        {
            MessageBox.Show("Run AddIn");

            GenerujDOC(_aplDesc);

            return 0;
        }
        internal static MyAddin Instance
        {
            get { return s_App; }
        }

        public void GenerujDOC(System.IntPtr aplDesc)
        {
			...
        }
    }

W momencie kiedy aplikacja X ładuje ten dodatek w konstruktorze obiektu dostaję System.IntPtr aplDesc
Uruchamiana jest też metoda Run(string[] str), gdzie testuję czy metoda GenerujDOC() działa poprawnie.
Ażeby z "innego projektu" móc korzystać z funkcji GenerujDOC() muszę jakoś dostać się do obiektu aplDesc,
nie wiem jak to zrobić.
Dodałem referencję ale Session.Instance jest nulem.

0

No to masz zagadnie projektowe do rozwiązania. Niestety nikt inny nie zna twoich pakietów. A nie jest to szycie dratwą do czegoś jeszcze innego?
Ten System.IntPtr jest zbyt charakterystyczny.

Co to jest NAPRAWDĘ ?
Inaczej nikt Ci nie pomoże.

(na marginesie, najpierw "normalne" programowanie, potem jakiś hacking)

Kaczor D.

0

Co to jest NAPRAWDĘ ?

Tak naprawdę to metoda GenerujDOC() siedzi od kilku lat w moim projekcie exe, komunikuje się z aplikacją X za pomocą COM.
Jedyny problem to powolne działanie, kiedyś było to akceptowalne teraz już nie.

Kiedy GenerujDOC() zaimplementowałem w pluginie prędkość działania jest nieporównywalnie lepsza.
Nie robiłem wcześniej nic jako plugin, dlatego zamieściłem tu zapytanie bo sądziłem że jest to jakiś znany problem, który można łatwo rozwiązać.
Teraz mam wątpliwości czy to podejście jest właściwe, czy tak można to zrealizować.
Może macie jeszcze jakieś sugestie?

1

Ja bym nie bawił się w żadne ładowania bibliotek i COM tylko zrobił to jak biały człowiek, czyli:

  1. zaimplementował to w module (można ten moduł podpiąć bezpośrednio do projektu, można podpiąć dll, można wypchnąć do nugeta)
  2. wykorzystał paczkę z punktu nr 1 gdzie tylko chcę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1