Statt sich mit Pointern und Methodenreferenzen herumzuärgern würde ich schlicht Interfaces benutzen. Dann übergibst du der
DLL einfach nur dieses Interface und kannst dann aus der
DLL dein Objekt in der Hostanwendung ganz normal über Methoden, Properties usw. ansprechen.