Klasse nur deklarieren und Referenz darauf verwenden



  • Hallo,

    es wird eine Objekt einer "ref class" erzeugt, welches an eine DLL übergeben werden soll.
    Wie schaut dann die Deklaration der Klasse aus, dass sich das Objekt in der Dll verwenden läßt?

    Bsp:
    Application:

    ref class foo
    {
    public:
    	foo();
    	void bar();
    private:
    };
    
    foo:foo()
    {}
    
    void foo::bar()
    {}
    

    Dll:

    // Klasse nur deklarieren, Implementierung soll's in der dll nicht geben
    ref class foo
    {
    public:
    	foo();
    	void bar();
    private:
    };
    
    ref class dllFoo
    {
    public:
    	// diese Methode kriegt ein Objekt der Klasse foo
    	void dllMethod(foo ^ FooObject);
    };
    
    void dllFoo::dllMethod(foo ^ FooObject)
    {
    
    }
    

    Leider motzt der Linker beim Übersetzten der Dll, dass er die Implementierungen der Methoden von foo() nicht findet.
    Kann er ja auch nicht, weil die solls in der Dll ja gar nicht geben.

    Als workaround ist foo derzeit von System::Object abgeleitet und dllMethod() erwartet ein System::Object ^ Obj,
    macht dann ein Obj->GetType()->InvokeMember("fooBar"..).
    Das ist aber häßlich. Direkte Verwendung wäre viel schöner...

    thx
    Martin



  • Das macht man in .net nicht so. Alle verwalteten Abhängigkeiten müssen per Assembly-Referenz geregelt werden. Ich habe zwar noch nie mit einer solchen Situation zu tun gehabt, aber ich denke es gibt mehrere Möglichkeiten. Du könntest die dll auf dein Programm mit einer Referenz austatten (unüblich aber machbar) oder foo direkt in die Dll verlegen.



  • Antwort schrieb:

    Das macht man in .net nicht so. Alle verwalteten Abhängigkeiten müssen per Assembly-Referenz geregelt werden. Ich habe zwar noch nie mit einer solchen Situation zu tun gehabt, aber ich denke es gibt mehrere Möglichkeiten. Du könntest die dll auf dein Programm mit einer Referenz austatten (unüblich aber machbar) oder foo direkt in die Dll verlegen.

    hmhm...
    Die dll's sind Plugins für das Programm.
    Referenz dürfte somit ausscheiden, weil die dll dann immer vorhanden sein muss.

    foo in der Dll implementieren wäre ziemlich redundant da es dann in jeder Dll vorhanden sein müsste, auserdem kennt dann das Programm kein foo mehr.

    Dann werd ichs bei dem
    "GetType()->InvokeMember()"
    belassen auch wenns imho eher unleserlich ist...

    thx
    Martin


Anmelden zum Antworten