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 Ausdruck2. 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 AusdruckKönnten Sie mir helfen?
Danke
-
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.