Zachowanie możliwości wywoływania metod przez klasę wyciągniętą do .dll

0

Wziąłem się za wyciąganie klasy komunikacyjnej z mojego projektu do dll. Niestety okazało się, że użycie jej jako odwołania uniemożliwia mi przekazanie instancji programu w parametrach.

Mam powtarzający się fragment kodu odpowiedzialny za komunikację (negocjacja adresów, portów i samo gadanie), wyciągnąłem go do .dll, ale spowodowało to że wszystkie odwołania w stylu senderHandle.ProcessData() przestały działać. A tymi odwołaniami po pierwsze przesyłałem dane do programu oraz oczekiwałem informacji zwrotnej czy dane są poprawne. Czy jest jakiś sposób, żeby wyciągnąć ten kod w jedno miejsce i zachować jego prawidłowe działanie bez całkowitej przebudowy kodu?

Wrzucam link do stacka z przykładowym kodem. Będę też wdzięczny za wyjaśnienie komentarza, który napisał jdweng bo albo mówi on o czymś poza moim pojmowaniem, albo na drodze stoi bariera językowa, albo po prostu jest nie na temat ;-) https://stackoverflow.com/questions/54520305/calling-main-program-method-from-a-dll?noredirect=1#comment95856410_54520305

1

Przekazujesz klasę Program. To jest już problem. Klasa Program za każdym razem (z każdym nowym programem) wygląda zupełnie inaczej i nie gwarantuje Ci żadnej spójności z Twoją biblioteką. Do DLL powinieneś przekazywać interfejs, który implementuje Twoja klasa, np:

public interface IApplication
{
   void DoOperation();
   object GetHandle();
}

//następnie Twoja dll:
public class MySuperDLL
{
  IApplication app;

  public MySuperDLL(IApplication app)
  {
      this.app = app;
      object handle = app.GetHandle();
  }
}

//i na koniec Twoja aplikacja:
public class Program: IApplication
{
   public void DoOperation()
   {
        //twoja implementacja
   }
   
   public object GetHandle()
   {
      //twoja implementacja
   }
}

Oczywiście interfejs IApplication powinien być zdefiniowany gdzieś w Twojej dll.

Takie połączenie zapewnia Ci spójność pomiędzy aplikacjami. Dll ma korzystać ze wspólnego interfejsu, który jest implementowany przez aplikacje korzystające z Twojej dll.

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