Header einbinden



  • Hallo Leute,

    ich habe ein Problem damit, die Form1.h einer CLR-Windows-Forms-Application in eine CLR-Class-Library zu includen.(Möchte von einer dll über das Hauptprogramm auf andere dll`s zugreifen können) Am Anfang einer jeden Headerdatei steht auch #pragma once um Mehrfachdeklarationen zu vermeiden...
    Unter Header-Files im Solution-Explorer habe ich die Form1.h bereits hinzugefügt.
    Andere erstellte Klassen können auch problemlos eingebunden und auf die Funktionalität zugegriffen werden, nur bei der Form1.h bekomme ich folgende Kompilierfehler:

    Error 13 error C2872: 'IDataObject' : ambiguous symbol

    Error 14 error C3699: '*' : cannot use this indirection on type

    Error 15 error C2371: 'IDataObject' : redefinition; different basic types

    Ich hoffe jemand kann mir helfen und bedanke mich im Vorfeld,
    viele Grüße
    Cain



  • IDataObject gibts an mehreren Orten.

    Aus .NET:
    http://msdn2.microsoft.com/en-us/library/system.windows.forms.idataobject.aspx

    Aus COM:
    http://msdn2.microsoft.com/en-us/library/ms688421.aspx

    Benutze vollqualifizierte Namen (namespaces) um die Typen zu referenzieren.



  • Vielen Dank für deine Antwort aber leider funktioniert das mit dem namespace nicht. Wenn ich versuche mit

    using namespace Vision;
    

    den Namensbereich aus der Windows-Forms-Applikation in der ClassLibrary bekannt zu machen, meldet der Kompiler, dass der Namensbereich nicht existiert...

    Oder meinst du vielleicht etwas ganz anderes?

    Viele Grüße
    Cain



  • Ja, ich meine etwas anderes.
    Eben genau nicht using namespace verwenden, sondern:

    System::Windows::Forms::IDataObject^ do;
    

    Simon



  • hmm, ich kann dir irgendwie nicht folgen was ich dann mit dem IDataObject machen soll und wie ich die Form1.h dadurch in der Library habe? Vielleicht kannst du mir das alles etwas genauer erklären damit ich das Problem lösen kann?

    Danke und viele Grüße
    Cain



  • Nein, ich schätzemal, das kann nicht genauer erklärt werden.
    Benutze nicht using namespaces sonder benutze voll- qualifizierte Namen.



  • Ich denke Simon meint, du darfst nicht einmalig

    #using namespace xy;
    

    einbinden und dann innerhalb deiner Datei auf die Member von xy zugreifen, sondern du musst innerhalb deines Codes jeweils den vollen Namen schreiben.

    xy::subxy:memberxy^ name = ...

    In deinem Fall wohl

    System::Windows::Forms::IDataObject^ do;
    

    ?



  • Aber was hat das IDataObject nun mit der Form1 zu tun, bzw. wie bekomme ich sie darein? Ich möchte ja von einer Assembly auf die Form1 einer Windows-Form-Applikation zugreifen können...

    Viele Grüße
    Cain


Anmelden zum Antworten