Funktion aus verwalteter Klasse exportieren

Beantwortet Funktion aus verwalteter Klasse exportieren

  • Sonntag, 31. Juli 2011 10:40
     
      Enthält Code

    Hi,

    Die Überschrift sagt es ja bereits, ich möchte eine Funktion aus einer verwalteten Klasse exportieren!

    Code:

    //Klasse1.h
    
    namespace Space1
    {
       public ref class Klasse1
       {
       public: void Funktion1(int Parameter)
         {
            //Funktionsinhalt
         }
       };
    }
    


    Wenn ich jetzt versuche die Funktion1 mit einer .def-Datei oder über /EXPORT:Funktion1 zu exportieren, kommt folgende Fehlermeldung:

    1>LINK : error LNK2001: Nicht aufgelöstes externes Symbol "Funktion1".
    1>C:\MyAssemblys\Space1\Release\Space1.lib : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

    Wenn ich nun die Funktion so aufschreibe:

    public: extern "C" __declspec(dllexport) Funktion1(int Parameter)
    {
        //Funktionsinhalt
    }
    
    oder
    
    public: __declspec(dllexport) Funktion1(int Parameter)
    {
        //Funktionsinhalt
    }
    


    kommt der Fehler:

    1>c:\myassemblys\Space1\Space1\Klasse1.h(81): error C2059: Syntaxfehler: 'Zeichenfolge'
    1>c:\myassemblys\Space1\Space1\Klasse1.h(81): error C3389: __declspec(dllexport) kann bei /clr:pure oder /clr:safe nicht verwendet werden.
    1>c:\myassemblys\Space1\Space1\Klasse1.h(82): error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionstext wird übersprungen

    bzw.

    1>c:\myassemblys\Space1\Space1\Klasse1.h(81): error C3389: __declspec(dllexport) kann bei /clr:pure oder /clr:safe nicht verwendet werden.
    1>c:\myassemblys\Space1\Space1\Klasse1.h(82): error C3387: 'Funktion1': __declspec(dllexport)/__declspec(dllimport) kann nicht auf ein Member eines verwalteten Typs angewendet werden
    1>c:\myassemblys\Space1\Space1\Klasse1.h(82): error C3395: "Space1::Klasse1::Funktion1": __declspec(dllexport) kann nicht mit der __clrcall-Aufrufkonvention auf eine Funktion angewendet werden.

    und auch, wenn ich das public davor weglasse kommen in allen Fällen die selben Fehler!

    Was kann ich machen, es muss doch irgendeine Möglichkeit geben aus einer Klasse eine Funktion zu exportieren?

    Vielen Dank schonmal im voraus!

Alle Antworten

  • Montag, 1. August 2011 06:52
    Moderator
     
     Beantwortet

    1. Managed Code kann man nicht klassisch exportieren.
    2. Du darfst nur die Option /clr verwenden wenn Du gemischt nativen und managed Code verwenden willst. Sobald Du nativen Code in Deinem Modul hast ist dieser nicht mehr "safe" nach .NET Richtlinie.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert developer1800 Montag, 1. August 2011 11:27
    •  
  • Montag, 1. August 2011 11:27
     
     

    Danke für deine Antwort!

    Schade, da muss ich mich wohl nach einer anderen Lösung umsehen!

    developer1800

  • Montag, 1. August 2011 13:33
    Moderator
     
     

    > Schade, da muss ich mich wohl nach einer anderen Lösung umsehen!

    Nein! Du musst nur die richtige Compiler Option setzen. Eben nur /clr!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de