Problem mit dll



  • (Umgebung: Visual Studio 2010 C++)
    Ich muss die COM-Application Dlubal::RSTAB6 verweisen
    Damit habe ich 2 Probleme:

    1. Da andere Anwendung die Funktion Application auch besitzt, muss man ein Alias benutzen. Aber das funktioniert nicht:

    using namespace rscom = Dlubal::RSTAB6 ;
    

    Die Fehlermeldung sind:
    1>RSTAB-RSCOM.cpp(8): error C2143: Syntaxfehler: Es fehlt ';' vor '='
    1>RSTAB-RSCOM.cpp(8): error C2871: 'rscom': Es ist kein Namespace mit diesem Namen vorhanden
    1>RSTAB-RSCOM.cpp(8): error C2513: 'int': Keine Variable vor '=' deklariert
    1>RSTAB-RSCOM.cpp(8): error C2882: 'RSTAB6': Unzulässige Verwendung eines Namespace-Bezeichners in einem Ausdruck

    2. Wo kein Alias brauche, der Verweis funktioniert. Aber bei der Definitioni von IrsStructure bekomme ich Error:

    using namespace Dlubal::RSTAB6; // Das funktioniert
    rstab::rstab(void)
    {
    IrsStructure IStructure = Marshal::GetActiveObject("RSTAB6.Structure") = IrsStructure; // Das funktioniert nicht
    }
    

    Die Fehlermeldungen:
    1>rstab.cpp(8): error C3149: "Dlubal::RSTAB6::IrsStructure": Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.
    1>rstab.cpp(8): error C2275: 'Dlubal::RSTAB6::IrsStructure': Ungültige Verwendung dieses Typs als Ausdruck

    Könnten Sie mir helfen?
    Danke


  • Mod

    Ich würde sagen, dass der Namespace auch vorhanden sein muss.



  • Für mich sieht das sehr nach C++/CLI aus.
    Und diese Zeile ergibt keinen Sinn:

    IrsStructure IStructure = Marshal::GetActiveObject("RSTAB6.Structure") = IrsStructure;
    

    Höchstwahrscheinlich ist folgendes gemeint:

    IrsStructure ^IStructure = Marshal::GetActiveObject("RSTAB6.Structure");
    

    Aber das ist nur eine Vermutung.



  • (Ich arbeite unter Microsoft Visual C++ 2010 Express)

    Die selbe Bibliothek unter C# funktioniert so:

    using rscom = Dlubal.RSTAB6;
    . . . .
    rscom.IrsStructure IStructure = Marshal.GetActiveObject("RSTAB6.Structure") as rscom.IrsStructure;
    

    Aber die Schreibweise für C++ kenne ich nicht. Ich habe das probiert, nach deiner Emphelung:

    #include "StdAfx.h"
    #include "rstab.h"
    using namespace System::Runtime::InteropServices;
    using namespace Dlubal::RSTAB6;
    
    rstab::rstab(void)
    {
    	IrsStructure ^IStructure = Marshal::GetActiveObject("RSTAB6.Structure");
    }
    

    Aber ich bekomme die Fehlermeldung:
    1>rstab.cpp(8): error C2440: 'Initialisierung': 'System::Object ^' kann nicht in 'Dlubal::RSTAB6::IrsStructure ^' konvertiert werden
    1> Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    1> Für die Umwandlung von Basis in Ableitung ist safe_cast oder static_cast erforderlich.



  • Sollte so gehen:

    rstab::rstab(void)
    {
        IrsStructure ^IStructure = (IrsStructure^)Marshal::GetActiveObject("RSTAB6.Structure");
    }
    


  • Vielen Dank. Es hat so funktioniert.
    Ich habe nicht gewusst, dass Visual C++ 2010 Express mit C++/CLI arbeitet.



  • gamma schrieb:

    Vielen Dank. Es hat so funktioniert.
    Ich habe nicht gewusst, dass Visual C++ 2010 Express mit C++/CLI arbeitet.

    Tut es nur, wenn du das so auswählst...



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten